在 CMake 中给 .cpp 定义一个宏

08 跨平台与编译器 - 图2
08 跨平台与编译器 - 图3
08 跨平台与编译器 - 图4

根据不同的操作系统,把宏定义成不同的值

08 跨平台与编译器 - 图5
08 跨平台与编译器 - 图6
08 跨平台与编译器 - 图7

CMake 还提供了一些简写变量:WIN32, APPLE, UNIX, ANDROID, IOS

  • 虽然名字叫 WIN32,实际上对 32 位 Windows 和 64 位 Windows 都适用
  • APPLE 对于所有苹果产品(MacOS 或 iOS)都为真
  • UNIX 对于所有 Unix 类系统(FreeBSD, Linux, Android, MacOS, iOS)都为真

08 跨平台与编译器 - 图8
08 跨平台与编译器 - 图9

使用生成器表达式,简化成一条指令

语法:$<$<类型:值>:为真时的表达式>

  • 比如 $<$:MY_NAME=”Bill Gates”> 在 Windows 平台上会变为 MY_NAME=”Bill Gates” 其他平台上则表现为空字符串

08 跨平台与编译器 - 图10
08 跨平台与编译器 - 图11

生成器表达式:如需多个平台可以用逗号分割08 跨平台与编译器 - 图12

08 跨平台与编译器 - 图13

判断当前用的是哪一款 C++ 编译器

08 跨平台与编译器 - 图14
08 跨平台与编译器 - 图15

也可以用生成器表达式判断编译器

08 跨平台与编译器 - 图16
08 跨平台与编译器 - 图17

生成器表达式也可以做复杂的逻辑判断

08 跨平台与编译器 - 图18
08 跨平台与编译器 - 图19

CMake 还提供了一些简写变量:MSVC, CMAKE_COMPILER_IS_GNUCC

08 跨平台与编译器 - 图20
08 跨平台与编译器 - 图21

CMAKE_CXX_COMPILER_ID 直接作为字符串变量

08 跨平台与编译器 - 图22
08 跨平台与编译器 - 图23

从命令行参数指定编译器

08 跨平台与编译器 - 图24
08 跨平台与编译器 - 图25

也可以通过环境变量 CXX 指定

08 跨平台与编译器 - 图26
08 跨平台与编译器 - 图27

CMAKE_GENERATOR 也可以了解一下

08 跨平台与编译器 - 图28
08 跨平台与编译器 - 图29

顺便一提,小彭老师使用的 vimrc 分享

github.com/archibate/vimrc
08 跨平台与编译器 - 图30