如何在Visual Studio 2019中有条件地编译c++源文件
How do I conditionally compile c++ source files in Visual Studio 2019?
我需要根据环境变量或其他输入参数有条件地编译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是否这样做,但需要记住(。
相关文章:
- 如何使用 soong 命名空间来有条件地编译模块
- 如何摆脱为条件编译定义预处理器宏的需要?
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 根据模板类型有条件地删除变量
- 有条件地选择带有 decltype() 和三元运算符的类型
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 有条件的打印和计数在 std::map 上有限制
- 如何在Visual Studio 2019中有条件地编译c++源文件
- 为什么有条件编译运算符模板会更改另一个运算符的可用性?
- C 模板:如何根据数据类型有条件编译不同的代码
- 根据数值模板参数有条件地编译转换运算符
- 如果类型(不)相等,是否可以C++有条件地编译代码?
- 如何有条件地为 Eclipse 中的交叉编译项目包含两个不同名称的相同版本的库
- 我们有没有像c一样用java进行条件编译
- 如何有条件地编译返回类型的模板化函数
- 为什么在有条件地包含stdafx.h之后会出现编译错误?
- c++宏有条件地编译代码
- Std::enable_if有条件地编译成员函数
- 是否可以基于宏或变量有条件地编译/运行代码