来自CMake的MSVC是否与_MSC_VER相同?
Is MSVC from CMake the same as _MSC_VER?
我目前正在努力消除CMake作为一个库的依赖,因为它似乎大多数生成的代码可以是静态的。执行一些环境检查来查看我们使用的是哪种操作系统和编译器。CMake中的其中一个检查如下所示:
if (MSVC)
set (HAVE_SYS_TYPES_H 1)
set (HAVE_STDINT_H 1)
set (HAVE_STDDEF_H 1)
# snip more things
else ()
# snip more things
endif ()
可以用下面的C代码替换吗?
#ifdef _MSC_VER
#define HAVE_SYS_TYPES_H
#define HAVE_STDINT_H
#define HAVE_STDDEF_H
// snip more things
#else
// snip more things
#endif
我最担心的是条件不变。我认为他们是,但我还没能找到任何能证实这一点的东西,而且我目前没有访问一个工作的Windows开发环境来构建它并找出答案。
谢谢你的任何可能的帮助!
CMake 3.4 MSVC Documentation:
True
在使用Microsoft Visual c++时当编译器是Microsoft Visual c++的某个版本时设置为
true
。
MSDN预定义宏文档:
列出预定义的ANSI/ISO C99和Microsoft c++实现预处理器宏。
…
微软预定义宏
_MSC_VER计算为一个整数字面值,用于编码编译器版本号的主号和副号组件. ...
由于CMake MSVC
是真实的,当使用Microsoft Visual c++和_MSC_VER
是一个微软特定的c++宏,这些是可互换的,以确定是否编译执行使用Microsoft编译器。
然而,我不确定#define
语句。CMake set
命令只是设置CMake变量,了解这些变量如何在CMake脚本中使用是有用的。
你所拥有的可能是足够的,或者:
#define HAVE_SYS_TYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_STDDEF_H 1
CMake add_definitions
命令是添加预处理器定义的一种方法。