visual MSBuild c++ -命令行-可以传递定义
visual MSBuild C++ - command line - can pass defines?
是否有这样的转换方法:
#define ERROR_LOG_LEVEL 5
进入一些msbuild通过命令行将传递给它的项目?
msbuild.exe {???}ERROR_LOG_LEVEL=5 target
我已经阅读了对类似问题的回答,看起来答案是没有,只是想仔细检查一下,以防某些天才找到了解决方法。
宏可以通过向编译器传递/D
选项来定义。您可以使用ClCompile
的AdditionalOptions
来指定MSBuild中的/D
选项:
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=5 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
如果您希望能够通过调用msbuild.exe来传递宏的值,您也可以轻松地这样做:
<ItemDefinitionGroup Condition="'$(ErrorLogLevel)' != ''">
<ClCompile>
<AdditionalOptions>/DERROR_LOG_LEVEL=$(ErrorLogLevel) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
使用msbuild.exe调用
msbuild /p:ErrorLogLevel=5 MyProject.vcxproj
我在这里张贴了一个答案,但我复制了另一个答案。您需要在PropertySheet中定义用户定义的宏。然后创建一个引用用户定义宏的预处理器。现在可以在代码中使用新的预处理器值。最后,对于构建,您可以使用/p
标志更改用户定义宏的值。在这里,我定义了一个用户定义的值,如mymacro
和一个预处理器值,如VAL
。现在,您可以简单地使用/p:mymacro=""some thing new""
编译该项目。
#include <iostream>
int main() {
std::cout << VAL << std::endl;
getchar();
}
yourproject.vcxproj
:
<ClCompile>
...
<PreprocessorDefinitions>VAL=$(mymacro);%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
msbuild yourproject.vcxproj /p:mymacro=""some thing new""
相关文章:
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 尝试构建 xerces c++ 解析器。Netbeans 和命令行构建错误未定义对"xercesc_3_2..."的引用
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- g++ 命令行宏定义字节流
- 在命令行程序中使用布尔值。找不到定义标志并检查它们是否在参数中的方法
- CMake命令行定义不永久为工具链文件
- 在C中如何在命令行中定义所有不知道宏(在源文件/标头文件中使用)
- 使用提升程序选项通过配置文件/命令行解析自定义对象
- php自定义C++模块通过命令行工作,而不是在Web服务器上
- 从命令行定义源文件的宏
- Qt Creator 3.2.2./Mac OSX 10.9.3 Qt Creaator中未定义的符号,在命令行中确定
- 如何使用CMake通过命令行定义c++预处理器宏
- 编译一个Qt单文件从命令行:未定义的引用到虚表
- 命令行应用程序的自定义URL方案
- 未定义对符号的引用,命令行中缺少DSO
- visual MSBuild c++ -命令行-可以传递定义
- 错误:对cv:: videoccapture::~ videoccapture()的引用符号未定义,命令行中缺少DSO