如何在Visual Studio 2019中有条件地编译c ++源文件?

时间:2019-11-11 18:25:04

标签: c++ windows visual-studio

我需要根据环境变量或其他输入参数有条件地编译C ++源文件。 VS2019中有一种机制可以做到这一点吗?

2 个答案:

答案 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是否这样做,但是要记住这一点)。