如何在Devenv命令行中添加预处理器#define?

13

在 devenv 命令行中是否有一种方法可以添加额外的预处理器 #define ?


不,那是无效的语法 - 它显示devenv帮助。 - Paulius Liekis
5个回答

12

我不完全确定您所说的vcbuild命令行是什么意思,但如果您指的是Visual C++命令行编译器,则可以通过添加 /Dxxxx 添加定义,例如:

cl.exe /DSHAREWARE ....

根据评论提供额外答案:

你应该能够通过设置CL环境变量来使用额外的预处理器定义:

SET CL=/DSHAREWARE
devenv ....

更多信息可以在MSDN找到。


我想到的是devenv.exe。如果我没记错,cl只编译而已。devenv还会进行链接。 - Paulius Liekis
没问题 - 我在别处找到了相同的答案。无论如何还是谢谢! - Paulius Liekis
那么,您应该接受答案,这样其他人就可以看到这个问题已经解决了... - HakonB

3

在您的项目设置中,添加以下预处理器定义:

$(MyPreprocessorDefinitions);

然后在您的*.bat文件中使用:

REM #define MY_DEF

set MyPreprocessorDefinitions=MY_DEF

devenv.exe ...

REM #undefine MY_DEF

set MyPreprocessorDefinitions=


2
#defines是在Visual Studio项目文件(.dsp或.vcproj文件)中定义的。这是一个简单的文本文件。因此,您可以从脚本中编辑项目文件,然后调用devenv.exe。

0

我找不到一种方法来避免修改解决方案或项目文件,所以我想出了以下方法:

  • 创建一个空文件作为构建的一部分,例如feature_flag.h
  • #if FEATURE_FLAG替换为#if !__has_include("feature_flag.h")
  • 在构建结束时删除feature_flag.h

它没有使用#define,但它确实使用了预处理器,这正是我需要的。


0
在我的情况下,我需要使用devenv出于其他原因(并在cygwin中运行,所以我有sed)。
我在项目属性中设置了一个编译符号SED_REPLACE_THIS,然后使用sed将其设置为有意义的值(即:DONT_CRASH_AS_MUCHsed -i 's/SED_REPLACE_THIS/DONT_CRASH_AS_MUCH/g' project.csproj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接