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

How do I conditionally compile c++ source files in Visual Studio 2019?

本文关键字:有条件 编译 c++ 源文件 2019 Visual Studio      更新时间:2023-10-16

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

此解决方案可与VS2017配合使用,但我不知道为什么它不能与VS2019配合使用。

您可以将环境变量作为预处理器定义"导入"。在Visual Studio项目的属性中,转到"配置属性"->"C/C++"->"预处理器"。单击"预处理器定义"字段,点击在最右边的向下箭头,然后选择"编辑"。

在这里,您可以添加包含环境变量的预处理器定义。每一行表示具有符号[name]=[value]的定义,该符号定义将被[value]取代的名为[name]的预处理器定义。环境变量应该封装在要解析的$()中。因此,例如,要导入环境变量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。

这实际上可以直接通过编辑项目的.vcxproj文件来实现,方法是在有问题的文件的CLCompile元素中添加"Condition"属性。

请注意,如果您确实添加了Condition属性,那么专门为该文件更改属性VS可能会删除该属性(我不确定VS是否这样做,但需要记住(。