ace*_*mtp 21 c++ msbuild visual-studio
在C++文件中,我有一个这样的代码:
#if ACTIVATE
# pragma message( "Activated" )
#else
# pragma message( "Not Activated")
#endif
Run Code Online (Sandbox Code Playgroud)
我想使用msbuild命令行将此ACTIVE定义设置为1.
它尝试了这个,但它不起作用:
msbuild /p:DefineConstants="ACTIVATE=1"
Run Code Online (Sandbox Code Playgroud)
任何的想法?
big*_*_29 26
我参加派对有点晚了(仅仅4年左右),但我只是不得不在一个项目上解决这个问题,并在搜索解决方案时偶然发现了这个问题.我们的解决方案是在Visual Studio中使用环境变量和附加选项框.
在调用msbuild之前设置环境变量
c:>设置ExternalCompilerOptions =/DFOO/DBAR
c:> msbuild
项目#1最终在vcxproj文件中看起来像这样:
c:\> set ExternalCompilerOptions=/DFOO /DBAR
c:\> msbuild
Run Code Online (Sandbox Code Playgroud)
这适用于VS 2010.我们从各种构建脚本驱动msbuild,因此丑陋隐藏了一点.请注意,当您需要将define设置为特定值(/ DACTIVATE = 1)时,我还没有测试它是否有效.我认为它会起作用,但我担心在那里有多个'='.
H ^ 2
C++项目(和解决方案)还没有(但是?)集成在MSBuild环境中.作为构建过程的一部分,调用VCBuild任务,它只是vcbuild.exe的包装器.
你可以 :
ACTIVATE=1,然后使用devenv.exe(使用/ ProjectConfig开关)对其进行编译.请注意,除非您稍微调整项目文件,否则您的解决方案将无法用于C#项目.作为参考,这是我将如何做到这一点:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />:<PropertyGroup Condition=" '$(MyConstants)' != '' "> <DefineConstants>$(DefineConstants);$(MyConstants)</DefineConstants> </PropertyGroup>
msbuild /p:MyConstants="ACTIVATE=1"
我想你想要:
/p:DefineConstants=ACTIVATE
Run Code Online (Sandbox Code Playgroud)
如果需要定义一些常量(不仅仅是true/false),可以通过以下方式实现:
在命令行上:
MSBuild /p:MyDefine=MyValue
Run Code Online (Sandbox Code Playgroud)
在vcxproj文件中(在<ClCompile>和/或<ResourceCompile>部分中,取决于您需要它的位置):
<PreprocessorDefinitions>MY_DEFINE=$(MyDefine);$(PreprocessorDefinitions)</PreprocessorDefinitions>
Run Code Online (Sandbox Code Playgroud)
小智 5
使用 CL 环境变量定义预处理器宏
在调用 MSBUILD 之前,只需使用 '/D' 选项设置环境变量 'CL',如下所示:
set CL=/DACTIVATE 定义激活
您可以使用“#”符号替换“=”符号
set CL=/DACTIVATE#1 将定义 ACTIVATE=1
然后调用 MSBUILD
有关 CL 环境变量的更多文档,请访问:https : //msdn.microsoft.com/en-us/library/kezkeayy(v=vs.140).aspx
| 归档时间: |
|
| 查看次数: |
26910 次 |
| 最近记录: |