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

3

我需要根据环境变量或其他输入参数有条件地编译C++源文件。在VS2019中是否有此机制?


2
通常是通过添加宏来完成。具体如何在VS中实现我不清楚,但它可能具有一些能力来实现它(如果没有,我会感到惊讶的)。 - Some programmer dude
使用预处理器指令和条件编译。 - Itachi Uchiwa
2个回答

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

这实际上可以通过直接编辑项目的.vcxproj文件来完成,方法是为相关文件的CLCompile元素添加“Condition”属性。

请注意,如果您添加了条件属性,则更改特定文件的属性后,VS可能会删除该属性(我不确定VS是否会这样做,但这是需要记住的事情)。


有没有办法通过 Visual Studio 项目设置添加此条件?$(variable) == 'VALUE' - sham1810

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接