设置为空环境变量的其他包含目录会中断视觉C++生成



我在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符号的更多错误。WIN32PreprocessorDefinitions中定义(PreprocessorDefinitions="WIN32;MORE_STUFF")

当我查看BuildLog.htm文件时,我想我明白发生了什么:

Creating temporary file "c:foobuildRSP00001273601360.rsp" with contents
[
/GL /I "..include" /I "" /D "WIN32" /D "MORE_STUFF" …
"..srcfoo.c"
]
Creating command line "cl.exe @"c:foobuildRSP00001273601360.rsp" /nologo /errorReport:prompt"

似乎/I后面跟着一个空参数,它不知何故消失了(被 Windows 命令行解析的怪癖吃掉了?或 Visual C++?),因此/D成为/I的参数,WIN32成为操作数(编译器将其解释为源文件名)。(如果您认为我的解释不正确,请随时发表评论。

我确实需要该项目在定义EXTRA_INCLUDE_DIR和未定义时都能工作,因为它用于在略有不同的情况下自动和手动构建。

如何拥有由环境变量指定的附加包含目录,并且在未定义此环境变量时不中断构建?

愚蠢的解决方法:

AdditionalIncludeDirectories=""..include";"$(EXTRA_INCLUDE_DIR).""

因此,当变量存在时,将搜索正确的目录;当变量不存在时,将搜索.(即当前驱动器的根目录)。希望开发人员不会将寄生.h文件存储在根目录中。

相关内容

  • 没有找到相关文章

最新更新