CMake 常用内置变量说明

CMake 常用内置变量说明

一、路径相关变量

CMAKE_SOURCE_DIR

中文: 顶层源码目录

说明: 最顶层CMakeLists.txt所在的目录(项目根目录)

示例: C:/Users/Administrator/Desktop/demo

CMAKE_BINARY_DIR

中文: 顶层构建目录

说明: 运行cmake命令的build目录(最顶层)

示例: C:/Users/Administrator/Desktop/demo/build

CMAKE_CURRENT_SOURCE_DIR

中文: 当前源码目录

说明: 当前正在处理的CMakeLists.txt所在目录

示例: C:/Users/Administrator/Desktop/demo/s1

CMAKE_CURRENT_BINARY_DIR

中文: 当前构建目录

说明: 当前CMakeLists.txt对应的build目录

示例: C:/Users/Administrator/Desktop/demo/build/s1

CMAKE_CURRENT_LIST_DIR

中文: 当前文件目录

说明: 当前正在处理的CMakeLists.txt文件所在目录(与CMAKE_CURRENT_SOURCE_DIR类似)

示例: C:/Users/Administrator/Desktop/demo/s1

CMAKE_CURRENT_LIST_FILE

中文: 当前文件完整路径

说明: 正在处理的CMakeLists.txt的完整路径

示例: C:/Users/Administrator/Desktop/demo/s1/CMakeLists.txt

CMAKE_MODULE_PATH

中文: 模块搜索路径

说明: CMake查找模块文件(*.cmake)的路径列表

示例: set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

PROJECT_SOURCE_DIR

中文: 项目源码目录

说明: 最近一次调用project()命令的CMakeLists.txt所在目录

示例: C:/Users/Administrator/Desktop/demo/s1

PROJECT_BINARY_DIR

中文: 项目构建目录

说明: 对应PROJECT_SOURCE_DIR的构建目录

示例: C:/Users/Administrator/Desktop/demo/build/s1

PROJECT_NAME

中文: 项目名称

说明: 最近一次调用project()设置的项目名

示例: s1_exe

二、输出目录变量

CMAKE_RUNTIME_OUTPUT_DIRECTORY

中文: 运行时文件输出目录

说明: 可执行文件(.exe)和DLL(.dll)的输出位置

示例: ${CMAKE_SOURCE_DIR}/.../output

CMAKE_LIBRARY_OUTPUT_DIRECTORY

中文: 库文件输出目录

说明: 共享库(.so, .dylib)和模块(.dll)的输出位置

示例: ${CMAKE_SOURCE_DIR}/.../output/lib

CMAKE_ARCHIVE_OUTPUT_DIRECTORY

中文: 归档文件输出目录

说明: 静态库(.a, .lib)的输出位置

示例: ${CMAKE_SOURCE_DIR}/.../output/lib

CMAKE_RUNTIME_OUTPUT_DIRECTORY_

中文: 特定配置的运行时输出目录

说明: 为Debug/Release等配置单独设置输出目录

示例: CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG

CMAKE_LIBRARY_OUTPUT_DIRECTORY_

中文: 特定配置的库文件输出目录

说明: 为Debug/Release等配置单独设置库输出目录

示例: CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE

CMAKE_ARCHIVE_OUTPUT_DIRECTORY_

中文: 特定配置的归档文件输出目录

说明: 为Debug/Release等配置单独设置静态库输出目录

示例: CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG

三、编译器和工具链变量

CMAKE_C_COMPILER

中文: C编译器路径

说明: 使用的C编译器完整路径

示例: C:/Program Files/Microsoft Visual Studio/VC/bin/cl.exe

CMAKE_CXX_COMPILER

中文: C++编译器路径

说明: 使用的C++编译器完整路径

示例: C:/Program Files/Microsoft Visual Studio/VC/bin/cl.exe

CMAKE_C_COMPILER_ID

中文: C编译器标识

说明: 编译器的ID名称

可能值: MSVC, GNU, Clang, AppleClang

CMAKE_CXX_COMPILER_ID

中文: C++编译器标识

说明: C++编译器的ID名称

可能值: MSVC, GNU, Clang, AppleClang

CMAKE_C_STANDARD

中文: C语言标准版本

说明: 设置C语言标准(C90, C99, C11等)

示例: set(CMAKE_C_STANDARD 11)

CMAKE_CXX_STANDARD

中文: C++语言标准版本

说明: 设置C++语言标准(C++11, C++14, C++17, C++20等)

示例: set(CMAKE_CXX_STANDARD 17)

CMAKE_C_STANDARD_REQUIRED

中文: 是否强制要求C标准

说明: 如果编译器不支持指定标准,是否报错

示例: set(CMAKE_C_STANDARD_REQUIRED ON)

CMAKE_CXX_STANDARD_REQUIRED

中文: 是否强制要求C++标准

说明: 如果编译器不支持指定标准,是否报错

示例: set(CMAKE_CXX_STANDARD_REQUIRED ON)

CMAKE_C_EXTENSIONS

中文: 是否启用C编译器扩展

说明: 是否使用编译器特定的语言扩展

示例: set(CMAKE_C_EXTENSIONS OFF)

CMAKE_CXX_EXTENSIONS

中文: 是否启用C++编译器扩展

说明: 是否使用编译器特定的语言扩展

示例: set(CMAKE_CXX_EXTENSIONS OFF)

CMAKE_C_FLAGS

中文: C编译选项

说明: 传递给C编译器的额外标志

示例: set(CMAKE_C_FLAGS "-Wall -O2")

CMAKE_CXX_FLAGS

中文: C++编译选项

说明: 传递给C++编译器的额外标志

示例: set(CMAKE_CXX_FLAGS "-Wall -std=c++17")

CMAKE_C_FLAGS_DEBUG

中文: C Debug编译选项

说明: Debug配置下的C编译选项

示例: set(CMAKE_C_FLAGS_DEBUG "-g -O0")

CMAKE_CXX_FLAGS_DEBUG

中文: C++ Debug编译选项

说明: Debug配置下的C++编译选项

示例: set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")

CMAKE_C_FLAGS_RELEASE

中文: C Release编译选项

说明: Release配置下的C编译选项

示例: set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")

CMAKE_CXX_FLAGS_RELEASE

中文: C++ Release编译选项

说明: Release配置下的C++编译选项

示例: set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")

四、构建类型和配置

CMAKE_BUILD_TYPE

中文: 构建类型

说明: 单配置生成器(如Makefile)的构建类型

可能值: Debug, Release, RelWithDebInfo, MinSizeRel

示例: set(CMAKE_BUILD_TYPE Release)

CMAKE_CONFIGURATION_TYPES

中文: 配置类型列表

说明: 多配置生成器(如Visual Studio)支持的配置类型

默认值: Debug;Release;MinSizeRel;RelWithDebInfo

示例: set(CMAKE_CONFIGURATION_TYPES "Debug;Release")

CMAKE_BUILD_SHARED_LIBS

中文: 是否构建共享库

说明: 控制add_library()默认生成共享库还是静态库

示例: set(BUILD_SHARED_LIBS ON)

五、系统和平台变量

CMAKE_SYSTEM

中文: 完整系统名称

说明: 操作系统和版本的完整描述

示例: Windows-10.0.19045

CMAKE_SYSTEM_NAME

中文: 系统名称

说明: 操作系统名称

可能值: Windows, Linux, Darwin(macOS), Android

CMAKE_SYSTEM_VERSION

中文: 系统版本

说明: 操作系统版本号

示例: 10.0.19045

CMAKE_SYSTEM_PROCESSOR

中文: 处理器架构

说明: CPU架构类型

可能值: x86_64, AMD64, ARM, aarch64

WIN32

中文: 是否为Windows系统

说明: 在Windows平台上为TRUE

示例: if(WIN32) ... endif()

UNIX

中文: 是否为Unix-like系统

说明: 在Linux/macOS/BSD等平台为TRUE

示例: if(UNIX) ... endif()

APPLE

中文: 是否为苹果系统

说明: 在macOS/iOS等平台为TRUE

示例: if(APPLE) ... endif()

MSVC

中文: 是否为MSVC编译器

说明: 使用Microsoft Visual C++编译器时为TRUE

示例: if(MSVC) ... endif()

MINGW

中文: 是否为MinGW环境

说明: 使用MinGW工具链时为TRUE

示例: if(MINGW) ... endif()

CMAKE_SIZEOF_VOID_P

中文: 指针大小(字节)

说明: 用于判断32位还是64位系统

可能值: 4(32位), 8(64位)

示例: if(CMAKE_SIZEOF_VOID_P EQUAL 8) # 64位系统

六、生成器相关变量

CMAKE_GENERATOR

中文: CMake生成器名称

说明: 当前使用的生成器

示例: Visual Studio 17 2022, Unix Makefiles, Ninja

CMAKE_GENERATOR_PLATFORM

中文: 生成器平台

说明: Visual Studio生成器的目标平台

可能值: Win32, x64, ARM, ARM64

CMAKE_GENERATOR_TOOLSET

中文: 生成器工具集

说明: Visual Studio生成器使用的工具集版本

示例: v143, v142

CMAKE_MAKE_PROGRAM

中文: Make程序路径

说明: 实际执行构建的程序(如make, ninja, msbuild)

示例: C:/Program Files/CMake/bin/ninja.exe

七、项目信息变量

PROJECT_VERSION

中文: 项目版本号

说明: project()命令中指定的VERSION

示例: project(MyApp VERSION 1.2.3)

PROJECT_VERSION_MAJOR

中文: 项目主版本号

说明: 版本号的第一部分

示例: 1 (从1.2.3中提取)

PROJECT_VERSION_MINOR

中文: 项目次版本号

说明: 版本号的第二部分

示例: 2 (从1.2.3中提取)

PROJECT_VERSION_PATCH

中文: 项目补丁版本号

说明: 版本号的第三部分

示例: 3 (从1.2.3中提取)

PROJECT_DESCRIPTION

中文: 项目描述

说明: project()命令中指定的DESCRIPTION

示例: project(MyApp DESCRIPTION "My Application")

PROJECT_HOMEPAGE_URL

中文: 项目主页URL

说明: project()命令中指定的HOMEPAGE_URL

示例: project(MyApp HOMEPAGE_URL "https://example.com")

八、链接和依赖变量

CMAKE_INCLUDE_PATH

中文: 头文件搜索路径

说明: find_file()和find_path()的搜索路径

示例: set(CMAKE_INCLUDE_PATH "/usr/local/include")

CMAKE_LIBRARY_PATH

中文: 库文件搜索路径

说明: find_library()的搜索路径

示例: set(CMAKE_LIBRARY_PATH "/usr/local/lib")

CMAKE_PREFIX_PATH

中文: 前缀搜索路径

说明: find_package()等命令的搜索路径前缀

示例: set(CMAKE_PREFIX_PATH "C:/libs")

CMAKE_FIND_ROOT_PATH

中文: 根搜索路径

说明: 交叉编译时的根文件系统路径

示例: set(CMAKE_FIND_ROOT_PATH "/opt/cross-toolchain")

CMAKE_INSTALL_PREFIX

中文: 安装路径前缀

说明: make install时的安装目标目录

默认值(Windows): C:/Program Files/${PROJECT_NAME}

默认值(Unix): /usr/local

示例: set(CMAKE_INSTALL_PREFIX "/opt/myapp")

九、其他常用变量

CMAKE_VERBOSE_MAKEFILE

中文: 是否显示详细构建信息

说明: 是否显示完整的编译命令

示例: set(CMAKE_VERBOSE_MAKEFILE ON)

CMAKE_COLOR_MAKEFILE

中文: 是否使用彩色输出

说明: Makefile生成器是否使用彩色输出

示例: set(CMAKE_COLOR_MAKEFILE ON)

CMAKE_EXPORT_COMPILE_COMMANDS

中文: 是否导出编译命令

说明: 生成compile_commands.json文件(用于IDE和工具)

示例: set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

CMAKE_POSITION_INDEPENDENT_CODE

中文: 是否生成位置无关代码

说明: 为所有目标启用PIC(-fPIC)

示例: set(CMAKE_POSITION_INDEPENDENT_CODE ON)

CMAKE_SKIP_BUILD_RPATH

中文: 是否跳过构建时的RPATH

说明: 构建时不设置RPATH(Unix)

示例: set(CMAKE_SKIP_BUILD_RPATH TRUE)

CMAKE_INSTALL_RPATH

中文: 安装时的RPATH

说明: 安装后可执行文件的运行时库搜索路径

示例: set(CMAKE_INSTALL_RPATH "$ORIGIN/.../lib")

BUILD_TESTING

中文: 是否构建测试

说明: 是否启用测试功能(需要enable_testing())

示例: set(BUILD_TESTING OFF)

十、目标属性相关变量(用于target)

CMAKE__COMPILE_FEATURES

中文: 编译器支持的特性列表

说明: 当前编译器支持的语言特性

示例: CMAKE_CXX_COMPILE_FEATURES

CMAKE__COMPILER_VERSION

中文: 编译器版本

说明: 当前使用的编译器版本号

示例: CMAKE_CXX_COMPILER_VERSION

CMAKE__POSTFIX

中文: 配置后缀

说明: 为不同配置的目标文件添加后缀

示例: set(CMAKE_DEBUG_POSTFIX "_d")

EXECUTABLE_OUTPUT_PATH (已弃用)

中文: 可执行文件输出路径(旧版本)

说明: 已被CMAKE_RUNTIME_OUTPUT_DIRECTORY替代

建议: 使用CMAKE_RUNTIME_OUTPUT_DIRECTORY

LIBRARY_OUTPUT_PATH (已弃用)

中文: 库文件输出路径(旧版本)

说明: 已被CMAKE_LIBRARY_OUTPUT_DIRECTORY替代

建议: 使用CMAKE_LIBRARY_OUTPUT_DIRECTORY

使用技巧

  1. 查看变量值:

    message(STATUS "CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")

  2. 打印所有变量:

    get_cmake_property(_vars VARIABLES)

    foreach(_var v a r s ) m e s s a g e ( S T A T U S " {_vars}) message(STATUS " vars)message(STATUS"{_var} = KaTeX parse error: Expected '}', got 'EOF' at end of input: {{_var}}")

    endforeach()

  3. 判断变量是否定义:

    if(DEFINED MY_VARIABLE)

    message("变量已定义")

    endif()

  4. 设置缓存变量:

    set(MY_VAR "value" CACHE STRING "描述" FORCE)

  5. 使用环境变量:

    set(MY_PATH $ENV{PATH})

相关推荐
迷途之人不知返10 分钟前
C++初识
c++
leiming610 分钟前
c++qt开发第三天 摄像头采集视频
开发语言·c++·qt
烛衔溟13 分钟前
C语言并发编程:Windows线程
c语言·c++·windows·性能优化·多线程·并发编程·线程同步
im_AMBER13 分钟前
Leetcode 97 移除链表元素
c++·笔记·学习·算法·leetcode·链表
MindCareers18 分钟前
Beta Sprint Day 5-6: Android Development Improvement + UI Fixes
android·c++·git·sql·ui·visual studio·sprint
行稳方能走远27 分钟前
Android C++ 学习笔记2
c++
星火开发设计27 分钟前
链表详解及C++实现
数据结构·c++·学习·链表·指针·知识
修炼地28 分钟前
代码随想录算法训练营第五十三天 | 卡码网97. 小明逛公园(Floyd 算法)、卡码网127. 骑士的攻击(A * 算法)、最短路算法总结、图论总结
c++·算法·图论
QQ_43766431429 分钟前
Qt-框架
c++·qt
※※冰馨※※39 分钟前
【QT】初始化显示时正常,操作刷新后布局显示问题。
开发语言·c++·windows·qt