我需要根据环境变量或其他输入参数有条件地编译C++源文件。在VS2019中是否有此机制?
我需要根据环境变量或其他输入参数有条件地编译C++源文件。在VS2019中是否有此机制?
这种解决方案适用于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
这实际上可以通过直接编辑项目的.vcxproj文件来完成,方法是为相关文件的CLCompile元素添加“Condition”属性。
请注意,如果您添加了条件属性,则更改特定文件的属性后,VS可能会删除该属性(我不确定VS是否会这样做,但这是需要记住的事情)。