跳转到内容

CMake 入门/常用变数

维基教科书,自由的教学读本

以下是常用的 CMake 内定变数参考,内容并不完备。如果需要获得完整的变数说明,可输入下列指令

cmake --help-variables filename.htm

会在目前的资料夹下产生filename.htm,内容为所有内建变数的说明。

系统和编译器资讯

[编辑]

CMake 系统资讯

[编辑]

以下皆为字串类型

CMAKE_SYSTEM
系统全名,如 "Linux-2.4.22","FreeBSD-5.4-RELEASE" 或 "Windows 5.1"
CMAKE_SYSTEM_NAME
系统名称,如 "Linux", "FreeBSD" or "Windows"
CMAKE_SYSTEM_VERSION
只有 CMAKE_SYSTEM 当中版本的部分
CMAKE_SYSTEM_PROCESSOR
CPU 名称,如 "Intel(R) Pentium(R) M processor 2.00GHz"
CMAKE_GENERATOR
在命令列所指定的 Generator 名称

系统旗标

[编辑]

以下皆为 BOOL 类型,若是与目前所属的作业系统/编译器相符,其值为True,否则为 False。

UNIX
WIN32
在 MINGW、CYGWIN、MSYS 亦为 True
APPLE
MINGW
MSYS
CYGWIN
BORLAND
WATCOM
MSVC, MSVC_IDE, CMAKE_COMPILER_2005, MSVC60, MSVC70, MSVC71, MSVC80, MSVC90, MSVC10
不同版本的微软 Visual C++ 专案档
CMAKE_COMPILER_IS_GNUCC
目前使用 GNU C 编译器
CMAKE_COMPILER_IS_GNUCXX
目前使用 GNU C++ 编译器

资料夹和档案资讯

[编辑]
CMAKE_SOURCE_DIR
内容为 source tree 根目录的完整路径,也就是 CMake 开始建置过程的进入点。
CMAKE_BINARY_DIR
内容为 binary tree 根目录的完整路径,在 in-source build 的时候值与 CMAKE_SOURCE_DIR 相同。
PROJECT_SOURCE_DIR
目前正在处理中的专案最上层目录,即内含 project() 指令的 CMakeLists 所在资料夹。
PROJECT_BINARY_DIR
目前所属专案的建置根目录。在 in-source build 时和 PROJECT_SOURCE_DIR 相同。
CMAKE_CURRENT_SOURCE_DIR
目前正在处理的 CMakeLists.txt 所在位置。
CMAKE_CURRENT_BINARY_DIR
目前正在处理的 CMakeLists.txt 对应的建置资料夹位置。在 in-source build 时和 CMAKE_CURRENT_SOURCE_DIR 相同。

编译选项

[编辑]
BUILD_SHARED_LIBS
将所有程式库 target 设成共享程式库,只对未指定类型的程式库有效。
CMAKE_BUILD_TYPE
控制建置类型,值可为下列之一:
  • None: 编译器预设值
  • Debug: 产生除错资讯
  • Release: 进行最佳化
  • RelWithDebInfo: 进行最佳化,但仍然会启用 DEBUG flag
  • MinSizeRel: 进行程式码最小化

特别要注意的是,CMAKE_BUILD_TYPE 在 configuration time 不会自动初始化为可读取的变数,必须要在使用者指定建置类型后才可以利用。

CMAKE_C_FLAGS
在呼叫 C 编译器时附加的额外选项,对所有的建置类型都有效。
CMAKE_C_FLAGS_DEBUG
在呼叫 C 编译器时附加的额外选项。只有在建置类型为 Debug 时才会套用。
CMAKE_C_FLAGS_RELEASE
在呼叫 C 编译器时附加的额外选项。只有在建置类型为 Release 时才会套用。
CMAKE_C_FLAGS_RELWITHDEBINFO
在呼叫 C 编译器时附加的额外选项。只有在建置类型为 RelWithDebInfo 时才会套用。
CMAKE_CXX_FLAGS、CMAKE_CXX_FLAGS_DEBUG、CMAKE_CXX_FLAGS_RELEASE、CMAKE_CXX_FLAGS_RELWITHDEBINFO
同上,但作用在 C++ 编译器 。
CMAKE_EXE_LINKER_FLAGS
生成执行档时所使用的连结选项。
CMAKE_SHARED_LINKER_FLAGS
生成 shared library 时所使用的连结选项。