【发布时间】:2019-11-11 18:25:04
【问题描述】:
我需要根据环境变量或其他输入参数有条件地编译 C++ 源文件。 VS2019中是否有机制可以做到这一点?
【问题讨论】:
-
这通常是通过添加宏来完成的。究竟如何在 VS 中做到这一点我不知道,但它可能有一些能力来做到这一点(如果没有,我会感到惊讶)。
-
使用带有预处理指令的条件编译。
标签: c++ windows visual-studio
我需要根据环境变量或其他输入参数有条件地编译 C++ 源文件。 VS2019中是否有机制可以做到这一点?
【问题讨论】:
标签: c++ windows visual-studio
此解决方案适用于 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。
【讨论】:
这实际上可以通过编辑项目的 .vcxproj 文件来直接完成,方法是向相关文件的 CLCompile 元素添加“条件”属性。
请注意,如果您确实添加了 Condition 属性,那么专门为该文件更改属性 VS 可能会删除该属性(我不确定 VS 是否这样做,但请记住这一点)。
【讨论】: