变量 | 功能 |
---|---|
PROJECT_NAME | 通过PROJECT() 命令指定的项目名称 |
CMAKE_PROJECT_NAME | 当前项目的名称 |
PROJECT_SOURCE_DIR | 使用cmake 命令后紧跟的目录,一般是工程的根目录 |
PROJECT_BINARY_DIR | 执行cmake 命令的目录 |
EXECUTABLE_OUTPUT_PATH | 重新定义目标二进制可执行文件的存放位置 |
LIBRARY_OUTPUT_PATH | 重新定义目标链接库文件的存放位置 |
CMAKE_SOURCE_DIR | 顶级 CMakeLists.txt 文件所在路径(这个变量与子目录中的 CMakeLists.txt 文件无关) |
CMAKE_BINARY_DIR | 项目实际构建路径,假设在build 目录进行的构建,那么得到的就是这个目录的路径(这个变量与子目录中的 CMakeLists.txt 文件无关) |
CMAKE_CURRENT_SOURCE_DIR | 当前处理的CMakeLists.txt 所在的路径 |
CMAKE_CURRENT_BINARY_DIR | 当前 CMakeLists.txt 构建输出所在的目录 |
CMAKE_CURRENT_LIST_DIR | 当前执行 CMakeLists.txt 文件所在目录 |
CMAKE_CURRENT_LIST_FILE | 当前执行 CMakeLists.txt 文件所在路径 |
CMAKE_CURRENT_LIST_LINE | 当前执行 CMakeLists.txt 文件所在行号 |
CMAKE_INSTALL_PREFIX | 安装目录前缀 |
CMAKE_MODULE_PATH | 指定额外的CMake 模块搜索路径 |
CMAKE_PREFIX_PATH | 用于查找库文件的路径前缀 |
CMAKE_BUILD_TYPE | 指定构建类型(比如Release 或Debug ) |
注意1:
CMAKE_PROJECT_XXX
表示顶级CMakeLists.txt
调用PROJECT() 命令
PROJECT_XXX
表示 当前CMakeLists.txt
调用PROJECT() 命令
注意2:
CMAKE_*
与CMAKE_CURRENT_*
区别在于,CMAKE_*
表示顶级CMakeLists.txt
文件,CMAKE_CRRUENT_*
表示当前CMakeLists.txt
文件。
变量 | 功能 |
---|---|
CMAKE_C_FLAGS | 设置 C 编译器的命令行选项,也可以通过指令 add_definitions() 添加,示例: set(CMAKE_C_FLAGS "-std=c11 -pthread") |
CMAKE_C_FLAGS_DEBUG | 用于Debug 配置的C编译标记,示例: set(CMAKE_C_FLAGS_DEBUG "-g -O0") |
CMAKE_C_FLAGS_RELEASE | 用于Release 配置的C 编译标记 |
CMAKE_C_COMPILER | 指定C 编译器的完整路径,比如:设置 SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc) ,但是这句话只有写到PROJECT( project_name) 之前才会起作用,或者将一系列设置写在toolchain.cmake 文件中 |
CMAKE_C_COMPILER_ID | 使用的C 编译器标识符 |
CMAKE_C_STANDARD | 指定项目编译的C 语言版本,如C99,C11 |
CMAKE_C_STANDARD_REQUIRED | 是一个布尔值变量,用于指定是否强制使用 CMAKE_C_STANDARD 中设置的 C 版本,如set(CMAKE_C_STANDARD_REQUIRED ON) |
CMAKE_CXX_FLAGS | 设置 C++ 编译器的命令行选项,也可以通过指令 add_definitions() 添加 |
CMAKE_CXX_FLAGS_DEBUG | 用于Debug 配置的C++ 编译标记 |
CMAKE_CXX_FLAGS_RELEASE | 用于Release 配置的C++ 编译标记 |
CMAKE_CXX_COMPILER | 指定C++ 编译器的完整路径 |
CMAKE_CXX_COMPILER_ID | 使用的C++ 编译器标识符 |
CMAKE_CXX_STANDARD | 指定项目编译的C++ 语言版本,如C++14,C++17 |
CMAKE_CXX_STANDARD_REQUIRED | 是一个布尔值变量,用于指定是否强制使用 CMAKE_CXX_STANDARD 中设置的 C++ 版本,如set(CMAKE_CXX_STANDARD_REQUIRED ON) |
CMAKE_COMPILER_IS_GNUCXX | 如果当前构建使用 GNU C++ 编译器,则此变量值为True |
CMAKE_VERBOSE_MAKEFILE | 如果为TRUE ,构建过程将显示更多的信息 |
注意:
add_definitions(-DENABLE_DEBUG -DXYZ)
# 参数之间用空格分隔
-D
相当于就是定义,-D
可以理解为告诉cmake
后边我要定义一些参数了, 你每定义一个就在前边加上-D
就是了。
变量 | 功能 |
---|---|
PROJECT_NAME | 通过PROJECT() 命令指定的项目名称 |
PROJECT_SOURCE_DIR | 使用cmake 命令后紧跟的目录(即包含最顶层 CMakeLists.txt 文件的目录),即项目的源代码根目录 |
PROJECT_BINARY_DIR | 项目的构建目录,如果是外部构建,这将与 CMAKE_BINARY_DIR 不同 |
PROJECT_VERSION | 通过 PROJECT() 命令设置的项目版本 |
PROJECT_VERSION_MAJOR | 项目的主版本号 |
PROJECT_VERSION_MINOR | 项目的次版本号 |
PROJECT_VERSION_PATCH | 项目的补丁版本号 |
PROJECT_VERSION_TWEAK | 项目的微调版本号(如果指定) |
PROJECT_DESCRIPTION | 项目的描述信息(需要CMake 3.9 及以上版本) |
PROJECT_HOMEPAGE_URL | 项目的主页URL (需要CMake 3.12 及以上版本) |
注意:
PROJECT_VERSION
、PROJECT_VERSION_MAJOR
、PROJECT_VERSION_MINOR
、PROJECT_VERSION_PATCH
和PROJECT_VERSION_TWEAK
变量的设置依赖于PROJECT()
命令中指定的版本信息,格式通常是PROJECT(ProjectName VERSION major.minor.patch[.tweak])
。
变量 | 功能 |
---|---|
CMAKE_SYSTEM | 当前系统的名称和版本,为 CMAKE_SYSTEM_NAME 和 CMAKE_SYSTEM_VERSION 的组合,比如:Linux-4.18.0-277.el8.x86_64 |
CMAKE_SYSTEM_NAME | 不包含版本的系统名称,比如 set(CMAKE_SYSTEM_NAME Linux) ;该指令必须存在,其目的是设置目标机使用的操作系统名称,支持Linux,QNX,WindowsCE,Android 等。如果没有操作系统,那么就写 Generic 。执行该指令后,cmake 变量CMAKE_CROSSCOMPILING 会自动被设置为 TRUE ,此时 cmake 就会“知道“现在执行的是交叉编译 |
CMAKE_HOST_SYSTEM | CMake 构建时使用的系统的名称和版本 |
CMAKE_HOST_SYSTEM_NAME | 构建 CMake 时使用的系统名称,与 CMAKE_SYSTEM_NAME 类似,但适用于交叉编译。 |
CMAKE_SYSTEM_VERSION | 系统版本,比如4.18.0-277.el8.x86_64 |
CMAKE_SYSTEM_PROCESSOR | 可选项,当前正在为其构建的CPU 的名称,例如 set(CMAKE_SYSTEM_PROCESSOR arm) ;当不交叉编译时,此变量与 CMAKE_HOST_SYSTEM_PROCESSOR 变量具有相同的值;只有在目标程序要运行在不同硬件平台时候才需要进行设置针对不同的对象。它可以被用来做一些编译器编译选项的快速设定。 |
CMAKE_HOST_SYSTEM_PROCESSOR | 当前运行的CPU 在CMake 的名称 |
CMAKE_CROSSCOMPILING | 如果当前构建是交叉编译,则此变量值为真 |
CMAKE_FIND_ROOT_PATH | 在交叉编译时,用于寻找目标系统上支持库和头文件的路径 |
CMAKE_SIZEOF_VOID_P | CMake 编译器检测到的目标体系结构的 void * 的大小(例如为 4 或者 8 ),可用于确定是 32 位还是 64 位系统 |
变量 | 功能 |
---|---|
WIN32 | 当目标系统是 Windows (包括 Win64 )时设置为True |
UNIX | 如果当前系统是 Unix 类似系统(包括 Linux,macOS 和其他 Unix 系统),则此变量值为True |
APPLE | 如果当前系统是基于 Apple 的操作系统(如 macOS ),则此变量值为True |
CYGWIN | 如果当前系统是 Cygwin (Windows 上运行的 Unix 类似环境),此变量值为True |
MINGW | 如果当前系统使用 MinGW 编译器(适用于 Windows ),此变量值为True |
MSVC | 如果当前构建使用 Microsoft Visual C++ 编译器,则此变量值为True |
变量 | 功能 |
---|---|
CMAKE_VERSION | CMake 的版本 |
BUILD_SHARED_LIBS | 一个布尔变量,用于控制默认链接库的类型(静态或动态),用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库 |
注意:如果
set(BUILD_SHARED_LIBS ON)
后,默认生成的为动态库。