我目前正在努力将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开发环境来构建它并找到答案。
感谢您提供任何可能的帮助!
答案 0 :(得分:2)
使用Microsoft Visual C ++时
True
。当编译器是某个版本的Microsoft Visual C ++时,设置为
true
。
MSDN Predefined Macros Documentation:
列出预定义的ANSI / ISO C99和Microsoft C ++实现预处理器宏。
...
特定于Microsoft的预定义宏
_MSC_VER 计算整数文字,该文字编码编译器版本号的主要和次要编号组件。 ...
由于使用Microsoft Visual C ++时CMake MSVC
为真,并且_MSC_VER
是Microsoft特定的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
命令是添加预处理器定义的一种方法。