我需要根据环境变量或其他输入参数有条件地编译C ++源文件。 VS2019中有一种机制可以做到这一点吗?
答案 0 :(得分:3)
此解决方案适用于VS2017,但我不知道为什么它也不适用于VS2019。
您可以“导入”环境变量作为预处理器定义。在Visual Studio项目的属性中,转到“配置属性”->“ C / C ++”->“预处理器”。单击“预处理器定义”字段,单击最右边的向下箭头,然后选择“编辑”。
在这里,您可以添加包含环境变量的预处理器定义。每行代表一个带有符号[name]=[value]
的定义,该定义定义了一个名为[name]
的预处理器定义,它将被[value]
代替。应该将环境变量包装在$()
中以进行解析。因此,例如,要导入环境变量MY_ENV_VAR
,可以添加定义MY_ENV_VAR=$(MY_ENV_VAR)
。如果MY_ENV_VAR
在编译时说5,则此定义等同于整个项目中都有一个#define MY_ENV_VAR 5
。
然后,在源文件中,可以使用#if
/ #endif
防护将代码包装起来,以有条件地编译该代码。使用同一示例,仅在MY_ENV_VAR
正好为1的情况下编译源文件,您应编写:
#if MY_ENV_VAR == 1
// Entire source file
#endif // #if MY_ENV_VAR == 1
请注意,在Visual Studio启动时会加载环境变量。如果希望对环境变量的最新更改可见,则可能需要重新启动Visual Studio。
答案 1 :(得分:1)
实际上,可以通过在相关文件的CLCompile元素中添加“条件”属性来编辑项目的.vcxproj文件,直接完成此操作。
请注意,如果确实添加了Condition属性,则专门为该文件更改属性VS可能会删除该属性(我不确定VS是否这样做,但是要记住这一点)。