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

Posted

技术标签:

【中文标题】如何在 Visual Studio 2019 中有条件地编译 c++ 源文件?【英文标题】:How do I conditionally compile c++ source files in Visual Studio 2019? 【发布时间】:2019-11-11 18:25:04 【问题描述】:

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

【问题讨论】:

这通常是通过添加宏来完成的。究竟如何在 VS 中做到这一点我不知道,但它可能有一些能力来做到这一点(如果没有,我会感到惊讶)。 使用带有预处理指令的条件编译。 【参考方案1】:

此解决方案适用于 VS2017,但我不知道为什么它也不适用于 VS2019。

您可以“导入”环境变量作为预处理器定义。在 Visual Studio 项目的属性中,转到配置属性 -> C/C++ -> 预处理器。单击 Preprocessor Definitions 字段,点击最右侧的向下箭头并选择 Edit。

在这里,您可以添加包含环境变量的预处理器定义。每行表示一个带有符号[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。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何在 Visual Studio 2019 中有条件地编译 c++ 源文件?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2012中如何查看一个工程需要哪些dll文件???

删除Visual Studio 2019中菜单下方的空行

如何在 Linux 上高效编译 Visual Studio C++ 项目

关闭 Visual Studio 动画

此项目不支持脚手架 Visual Studio 2019

visual studio 2010 序列号在哪输入