Visual Studio:如何使用平台工具集作为预处理器指令
Visual Studio: How to use platform toolset as preprocessor directive?
我的项目有两个平台工具集:v110和v110_xp,根据所选的平台,我希望包含/排除要编译的部分代码。
对于这两个平台工具集,_MSC_FULL_VER
和$(PlatformToolsetVersion)
具有完全相同的值。或者,我尝试使用$(PlatformToolset)
如下:
_MSC_PLATFORM_TOOLSET=$(PlatformToolset)
但问题是CCD_ 4是非数字的。我想知道如何使用这个非数值作为预处理器指令?
尝试几种解决方案我发现
_MSC_PLATFORM_TOOLSET='$(PlatformToolset)'
然后
#if (_MSC_PLATFORM_TOOLSET=='v110')
[Something]
#endif
工作正常,但
#if(_MSC_PLATFORM_TOOLSET == 'v110_xp')
[SomethingElse]
#endif
导致"字符常量中的字符太多"错误。
关于上下文,请参阅这个类似的问题:Visual Studio:如何以编程方式检查使用的C++平台工具集
转到project properties -> C/C++ -> Preprocessor
并将以下内容添加到Preprocessor Definitions
:
_MSC_PLATFORM_TOOLSET_$(PlatformToolset)
然后你可以写这样的东西:
#ifdef _MSC_PLATFORM_TOOLSET_v110
[Something]
#endif
#ifdef _MSC_PLATFORM_TOOLSET_v110_xp
[SomethingElse]
#endif
这在VS2010中对我有效。
对于VS 2012/2013,如果使用向后兼容性工具集,则可以使用_USING_V110_SDK71_。VS2013将定义相同的名称,而不管平台工具集的名称是v120_xp。
#if (_MSC_VER >= 1700) && defined(_USING_V110_SDK71_)
// working in XP-compatibility mode
#endif
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- Xmllint未设置,而在路径中找不到XMLLINT;跳过XML预处理
- 当头文件被预处理时是否有一个预处理器选项显示?