我在 Visual C++ 2008 中有一个项目,其中包含目录的名称来自环境变量:
AdditionalIncludeDirectories=""..\include";"$(EXTRA_INCLUDE_DIR)""
(项目属性 → 配置属性 → C/C++ → 常规 → GUI 中的附加包含目录)
未定义环境变量时EXTRA_INCLUDE_DIR
,项目无法编译,并且出现奇怪的错误:。
1>Compiling...
1>WIN32
1>c1 : fatal error C1083: Cannot open source file: 'WIN32': No such file or directory
1>foo.c
以及更多错误表明WIN32
符号未定义。WIN32
在PreprocessorDefinitions
( PreprocessorDefinitions="WIN32;MORE_STUFF"
)中定义
当我查看BuildLog.htm
文件时,我想我明白发生了什么:
Creating temporary file "c:\foo\build\RSP00001273601360.rsp" with contents
[
/GL /I "..\include" /I "" /D "WIN32" /D "MORE_STUFF" …
"..\src\foo.c"
]
Creating command line "cl.exe @"c:\foo\build\RSP00001273601360.rsp" /nologo /errorReport:prompt"
似乎/I
后面是一个空参数,它以某种方式消失了(被 Windows 命令行解析的怪癖吃掉了?还是 Visual C++ 的?),因此/D
成为参数/I
并WIN32
成为操作数(编译器将其解释为源文件姓名)。(如果您认为我的解释不正确,请随时发表评论。)
我确实需要该项目在EXTRA_INCLUDE_DIR
定义和未定义时都可以工作,因为它在稍微不同的情况下用于自动和手动构建。
我怎样才能有一个由环境变量指定的附加包含目录,并且在未定义此环境变量时不破坏构建?