在C++文件中,我有一个这样的代码:
#if ACTIVATE # pragma message( "Activated" ) #else # pragma message( "Not Activated") #endif
我想使用msbuild命令行将此ACTIVE定义设置为1.
它尝试了这个,但它不起作用:
msbuild /p:DefineConstants="ACTIVATE=1"
任何的想法?
我参加派对有点晚了(仅仅4年左右),但我只是不得不在一个项目上解决这个问题,并在搜索解决方案时偶然发现了这个问题.我们的解决方案是在Visual Studio中使用环境变量和附加选项框.
在Visual Studio中,将环境变量宏$(ExternalCompilerOptions)添加到项目选项 - > C/C++ - >命令行下的其他选项(记住调试和发布配置)
在调用msbuild之前设置环境变量
c:>设置ExternalCompilerOptions =/DFOO/DBAR
c:> msbuild
项目#1最终在vcxproj文件中看起来像这样:
c:\> set ExternalCompilerOptions=/DFOO /DBAR
c:\> msbuild
这适用于VS 2010.我们从各种构建脚本驱动msbuild,因此丑陋隐藏了一点.请注意,当您需要将define设置为特定值(/ DACTIVATE = 1)时,我还没有测试它是否有效.我认为它会起作用,但我担心在那里有多个'='.
H ^ 2
C++项目(和解决方案)还没有(但是?)集成在MSBuild环境中.作为构建过程的一部分,调用VCBuild任务,它只是vcbuild.exe的包装器.
你可以 :
为您的解决方案创建一个特定的配置ACTIVATE=1
,然后使用devenv.exe(使用/ ProjectConfig开关)对其进行编译.
创建自己的目标文件以包装您自己对VCBuild任务的调用(请参阅Override参数)...
使用vcbuild.exe而不是msbuild.exe.(vcbuild.exe似乎没有等效的Override参数).
请注意,除非您稍微调整项目文件,否则您的解决方案将无法用于C#项目.作为参考,这是我将如何做到这一点:
在调用之前添加以下代码
:
$(DefineConstants);$(MyConstants)
像这样调用MSBuild:
msbuild /p:MyConstants="ACTIVATE=1"
我想你想要:
/p:DefineConstants=ACTIVATE
如果需要定义一些常量(不仅仅是true/false),可以通过以下方式实现:
在命令行上:
MSBuild /p:MyDefine=MyValue
在vcxproj文件中(在
MY_DEFINE=$(MyDefine);$(PreprocessorDefinitions)