如何在 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文件???