来自CMake的MSVC是否与_MSC_VER相同?

Is MSVC from CMake the same as _MSC_VER?

本文关键字:MSC VER 相同 CMake MSVC 是否 来自      更新时间:2023-10-16

我目前正在努力消除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命令是添加预处理器定义的一种方法。