当前位置:  开发笔记 > 编程语言 > 正文

msbuild:在命令行中设置一个特定的预处理器#define

如何解决《msbuild:在命令行中设置一个特定的预处理器#define》经验,为你挑选了4个好方法。

在C++文件中,我有一个这样的代码:

#if ACTIVATE
#   pragma message( "Activated" )
#else
#   pragma message( "Not Activated")
#endif

我想使用msbuild命令行将此ACTIVE定义设置为1.

它尝试了这个,但它不起作用:

msbuild /p:DefineConstants="ACTIVATE=1"

任何的想法?



1> bigh_29..:

我参加派对有点晚了(仅仅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



2> Mac..:

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"



3> Matt Howells..:

我想你想要:

/p:DefineConstants=ACTIVATE


@Matt,我提出了相同的答案,并且有两名评论者告诉我这行不通。因此,我删除了答案,以便其他具有MSBuild经验的人可能会提出一些想法。

4> 4LegsDrivenC..:

如果需要定义一些常量(不仅仅是true/false),可以通过以下方式实现:

在命令行上:

MSBuild /p:MyDefine=MyValue

在vcxproj文件中(在和/或部分中,取决于您需要它的位置):

MY_DEFINE=$(MyDefine);$(PreprocessorDefinitions)

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有