cmake-commands
参见:
- cmake-commands manual; 安装CMake后,在本地安装目录下也能够找到manual.
Scripting Commands
cmake_minimum_required
指定工程要求的CMAKE最低版本
-
语法
cmake_minimum_required(VERSIONmajor.minor[.patch[.tweak]]) -
示例
cmake_minimum_required(VERSION 2.8.11)project
设置工程名.
-
语法
project(ProjectName [LanguageName])project(ProjectName
[VERSIONmajor[.minor[.patch[.tweak]]]]
[DESCRIPTIONProjectDescription]
[HOMEPAGE_URLURLString]
[LANGUAGESLanguageName…]) - 说明
VERSION: 版本号.DESCRIPTION: 详细描述HOMEPAGE_URL: 主页LANGUAGES: 开发语言(CXX, )
- 示例
project(CERTI CXX)include
从文件或模块中加载并运行CMake代码.
??默认的加载目录为: C:/Program Files/CMake/share/cmake-3.20/mudules.
-
语法
include(file | module [OPTIONAL]
[RESULT_VARIABLEVariableName]
[NO_POLICY_SCOPE]) -
说明
OPTIONAL: 如果文件或模块不存在, 不会产生错误.RESULT_VARIABLE:
# ${CMAKE_ROOT} = C:/Program Files/CMake/share/cmake-3.20
include(${CMAKE_ROOT}/Modules/Dart.cmake)
# Load Checker macros
# 在${CMAKE_MODULE_PATH}目录下能够找到: CheckFunctionExists.cmake文件
include(CheckFunctionExists)
# 在${CMAKE_MODULE_PATH}目录下能够找到: CheckLibraryExists.cmake文件
include(CheckLibraryExists)
# 以下两种写法都行
include(Dart.cmake)
include(Dart)
if
-
语法
if(<condition>)
<commands>
elseif(<condition>) # optional block, can be repeated
<commands>
else()# optional block
<commands>
endif() -
示例
# New Policy for full path library search # see cmake --help-policy CMP0003 if(COMMAND CMAKE_POLICY) cmake_policy(SET CMP0003 NEW) endif(COMMAND CMAKE_POLICY) # Display some information on host and target (when cross-compiling) if (CMAKE_CROSSCOMPILING) message(STATUS "Cross-compiling build.") else (CMAKE_CROSSCOMPILING) message(STATUS "Native build.") endif (CMAKE_CROSSCOMPILING) # Test 32/64 bits if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") ... endif() # Test Endianess include(TestBigEndian) TEST_BIG_ENDIAN(BIG_ENDIAN) if(BIG_ENDIAN) ... endif(BIG_ENDIAN) if (NOT BUILD_LEGACY_LIBRTI AND WIN32) ... endif() if (CMAKE_VERSION VERSION_LESS 3.1.3) endif() if("${CMAKE_C_COMPILER}" MATCHES "clang.*") endif() IF ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") endif()
cmake_policy
if(COMMAND CMAKE_POLICY)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND CMAKE_POLICY)
enable_language
enable_language(C)
mark_as_advanced
标记此变量为高级, 在cmake-gui中, 当勾选Advanced选项时, 才会显示.
在脚本模式下, 此标记无作用.

-
语法
mark_as_advanced([CLEARFORCE] <var1> …) -
示例
# TCL_TCLSH ?? mark_as_advanced(TCL_TCLSH DART_ROOT)message
记录消息.
-
语法
-
常规消息
message([<mode>] “message text” …) -
Reporting checks
message(<checkState> “message text” …)
-
- 说明
- mode
- FATAL_ERROR : 致命错误. 停止处理和生成.
- SEND_ERROR : 错误. 继续处理,但不生成.
- WARNING : 警告. 可以继续向下处理.
- NOTICE : 打印到stderr的重要消息, 以引起用户的注意. 省略
mode时,为此. - STATUS : 状态.
- VERBOSE : 冗余.
- DEBUG : 调试.
- TRACE : 跟踪.
- mode
- 示例
# Display some information on host and target (when cross-compiling) if (CMAKE_CROSSCOMPILING) message(STATUS "Cross-compiling build.") else (CMAKE_CROSSCOMPILING) message(STATUS "Native build.") endif (CMAKE_CROSSCOMPILING)
set
给普通变量、缓存变量或环境变量赋值.
Set Normal Variable
-
语法
set(<variable> <value>… [PARENT_SCOPE]) -
示例
# Use CERTI specific CMake modules first set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/scripts) SET(PACKAGE_NAME "CERTI") SET(PACKAGE_VERSION_MAJOR "4") SET(PACKAGE_VERSION_MINOR "0") SET(PACKAGE_VERSION_PATCH "0") SET(PACKAGE_VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}")Set Cache Entry
Set Environment Variable
Project Commands
add_compile_definitions
将预处理宏定义添加到源文件的编译命令中.
-
语法
add_compile_definitions(<definition> …) -
示例
add_compile_definitions(FOO BAR) # 等价于 add_definitions(-DFOO -DBAR)
add_definitions
添加预处理宏定义. 建议使用add_compile_definitions替代.
-
语法
add_definitions(-DFOO-DBAR …)生成如下命令:
....g++.exe -DFOO -DBAR -g -o ....main.cpp.obj -c ...\\main.cppenable_language
在 CMake 中启用对某种语言的支持, 如: CXX, C, CUDA, OBJC, OBJCXX, Fortran, HIP, ISPC, and ASM.
-
语法
enable_language(<lang> [OPTIONAL]) -
示例:
enable_language(C)参见: enable_language
CTest Commands
Deprecated Commands
cmake-variables
ENV
读取环境变量的操作符.
$ENV{VAR}
读取PATH
message($ENV{PATH})
# 判断 变量环境变量PATH是否存在
if(DEFINED ENV{PATH})