news 2026/7/3 8:14:31

CMake常用内置变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake常用内置变量

CMake常用内置变量

  • 一、项目信息变量
  • 二、目录路径变量
  • 三、编译器相关变量
  • 四、构建类型变量
  • 五、系统平台变量
  • 六、输出路径变量
  • 七、查找相关变量
  • 八、安装相关变量
  • 九、其他常用变量

一、项目信息变量

变量名说明示例
PROJECT_NAME当前项目名称message("项目名: ${PROJECT_NAME}")
PROJECT_VERSION项目版本号project(HelloWorld VERSION 1.2.3)
PROJECT_SOURCE_DIR项目源码根目录/home/user/HelloWorld
PROJECT_BINARY_DIR项目构建根目录/home/user/HelloWorld/build
CMAKE_PROJECT_NAME顶层项目名称子项目中仍指向最顶层项目
project(hello_world LANGUAGES CXX VERSION1.0)message("项目:${PROJECT_NAME}")message("版本:${PROJECT_VERSION}")message("源码目录:${PROJECT_SOURCE_DIR}")message("项目构建根目录:${PROJECT_BINARY_DIR}")message("顶层项目名称:${CMAKE_PROJECT_NAME}")

二、目录路径变量

变量名说明示例值
CMAKE_SOURCE_DIR顶层CMakeLists.txt所在目录/home/user/project
CMAKE_BINARY_DIR顶层构建目录/home/user/project/build
CMAKE_CURRENT_SOURCE_DIR当前处理的CMakeLists.txt所在目录/home/user/project/src
CMAKE_CURRENT_BINARY_DIR当前处理的构建目录/home/user/project/build/src
CMAKE_CURRENT_LIST_DIR当前处理文件的目录用于include的.cmake文件
CMAKE_INSTALL_PREFIX安装路径前缀/usr/local(Linux)
message("顶层CMakeLists.txt所在目录:${CMAKE_SOURCE_DIR}")message("顶层构建目录:${CMAKE_BINARY_DIR}")message("当前处理的CMakeLists.txt所在目录:${CMAKE_CURRENT_SOURCE_DIR}")message("当前处理的构建目录:${CMAKE_CURRENT_BINARY_DIR}")message("当前处理文件的目录:${CMAKE_CURRENT_LIST_DIR}")message("安装路径前缀:${CMAKE_INSTALL_PREFIX}")

三、编译器相关变量

变量名分类说明示例/可选值
CMAKE_C_COMPILER编译器路径C编译器路径/usr/bin/gcc
CMAKE_CXX_COMPILER编译器路径C++编译器路径/usr/bin/g++
CMAKE_C_COMPILER_ID编译器识别C编译器IDGNU,Clang,MSVC
CMAKE_CXX_COMPILER_ID编译器识别C++编译器ID同上
CMAKE_C_FLAGS编译选项C编译选项-Wall -O2
CMAKE_CXX_FLAGS编译选项C++编译选项-std=c++17 -Wall
CMAKE_CXX_STANDARD标准控制C++标准版本11,14,17,20,23
CMAKE_CXX_STANDARD_REQUIRED标准控制强制要求指定标准ON/OFF
CMAKE_CXX_EXTENSIONS标准控制启用编译器扩展ON/OFF
CMAKE_C_STANDARD标准控制C标准版本90,99,11,17
CMAKE_C_STANDARD_REQUIRED标准控制强制C标准ON/OFF
CMAKE_C_EXTENSIONS标准控制C编译器扩展ON/OFF
# 设置 C++ 标准set(CMAKE_CXX_STANDARD20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)message("C++编译器路径:${CMAKE_CXX_COMPILER}")message("C++编译器ID:${CMAKE_CXX_COMPILER_ID}")message("C++编译选项:${CMAKE_CXX_FLAGS}")message("C++标准版本:${CMAKE_CXX_STANDARD}")message("强制要求指定C++标准:${CMAKE_CXX_STANDARD_REQUIRED}")message("C++启用编译器扩展:${CMAKE_CXX_EXTENSIONS}")

四、构建类型变量

变量名说明可选值
CMAKE_BUILD_TYPE构建类型Debug,Release,RelWithDebInfo,MinSizeRel
CMAKE_CONFIGURATION_TYPES多配置生成器的配置类型用于Visual Studio等
CMAKE_C_FLAGS_DEBUGDebug模式C编译选项-g
CMAKE_C_FLAGS_RELEASERelease模式C编译选项-O3 -DNDEBUG
CMAKE_CXX_FLAGS_DEBUGDebug模式C++编译选项-g
CMAKE_CXX_FLAGS_RELEASERelease模式C++编译选项-O3 -DNDEBUG
# 设置默认构建类型if(NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Debug)endif()message("构建类型:${CMAKE_BUILD_TYPE}")message("多配置生成器的配置类型:${CMAKE_CONFIGURATION_TYPES}")message("Debug模式C++编译选项:${CMAKE_CXX_FLAGS_DEBUG}")message("Release模式C++编译选项:${CMAKE_CXX_FLAGS_RELEASE}")

五、系统平台变量

变量名说明示例值
CMAKE_SYSTEM_NAME操作系统名称Linux,Windows,Darwin(macOS)
CMAKE_SYSTEM_VERSION系统版本10.0.19041
CMAKE_SYSTEM_PROCESSOR处理器架构x86_64,AMD64,arm64
WIN32Windows平台TRUE/FALSE
UNIXUnix-like平台TRUE/FALSE
APPLEmacOS平台TRUE/FALSE
LINUXLinux平台TRUE/FALSE
MSVCMicrosoft Visual C++TRUE/FALSE
if(WIN32)message("Windows平台")elseif(UNIX AND NOT APPLE)message("Linux平台")elseif(APPLE)message("macOS平台")endif()message("操作系统名称:${CMAKE_SYSTEM_NAME}")message("系统版本:${CMAKE_SYSTEM_VERSION}")message("处理器架构:${CMAKE_SYSTEM_PROCESSOR}")

六、输出路径变量

变量名说明示例
CMAKE_RUNTIME_OUTPUT_DIRECTORY可执行文件输出目录${PROJECT_BINARY_DIR}/bin
CMAKE_LIBRARY_OUTPUT_DIRECTORY动态库输出目录${PROJECT_BINARY_DIR}/lib
CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库输出目录${PROJECT_BINARY_DIR}/lib
EXECUTABLE_OUTPUT_PATH(旧)可执行文件路径不推荐使用
LIBRARY_OUTPUT_PATH(旧)库文件路径不推荐使用
# 统一设置输出目录set(CMAKE_RUNTIME_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/bin)set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/lib)set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/lib)message("可执行文件输出目录:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")message("动态库输出目录:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")message("静态库输出目录:${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")

七、查找相关变量

变量名说明示例
CMAKE_MODULE_PATH查找.cmake模块的路径${PROJECT_SOURCE_DIR}/cmake
CMAKE_PREFIX_PATH查找包的前缀路径/usr/local;/opt
CMAKE_INCLUDE_PATH头文件搜索路径额外的include路径
CMAKE_LIBRARY_PATH库文件搜索路径额外的库路径
# 添加自定义cmake模块路径list(APPEND CMAKE_MODULE_PATH"${PROJECT_SOURCE_DIR}/cmake")# 添加包搜索路径list(APPEND CMAKE_PREFIX_PATH"/opt/mylib")message("查找.cmake模块的路径:${CMAKE_MODULE_PATH}")message("查找包的前缀路径:${CMAKE_PREFIX_PATH}")message("头文件搜索路径:${CMAKE_INCLUDE_PATH}")message("库文件搜索路径:${CMAKE_LIBRARY_PATH}")

八、安装相关变量

变量名说明默认值(Linux)
CMAKE_INSTALL_PREFIX安装根目录/usr/local
CMAKE_INSTALL_BINDIR可执行文件安装目录bin
CMAKE_INSTALL_LIBDIR库文件安装目录lib
CMAKE_INSTALL_INCLUDEDIR头文件安装目录include
CMAKE_INSTALL_DATADIR数据文件安装目录share
message("安装根目录:${CMAKE_INSTALL_PREFIX}")message("可执行文件安装目录:${CMAKE_INSTALL_BINDIR}")message("库文件安装目录:${CMAKE_INSTALL_LIBDIR}")message("头文件安装目录:${CMAKE_INSTALL_INCLUDEDIR}")message("数据文件安装目录:${CMAKE_INSTALL_DATADIR}")

九、其他常用变量

变量名说明示例
CMAKE_VERBOSE_MAKEFILE显示详细编译信息ON/OFF
BUILD_SHARED_LIBS默认构建共享库ON/OFF
CMAKE_POSITION_INDEPENDENT_CODE启用PICON/OFF
CMAKE_EXPORT_COMPILE_COMMANDS生成compile_commands.jsonON/OFF
CMAKE_COLOR_DIAGNOSTICS彩色诊断信息ON/OFF
# 生成编译命令数据库(用于clangd等)set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 详细输出set(CMAKE_VERBOSE_MAKEFILE ON)# 位置无关代码set(CMAKE_POSITION_INDEPENDENT_CODE ON)message("显示详细编译信息:${CMAKE_VERBOSE_MAKEFILE}")message("默认构建共享库:${BUILD_SHARED_LIBS}")message("启用PIC:${CMAKE_POSITION_INDEPENDENT_CODE}")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 2:58:07

软件交付即暴露:Virbox Protector 的加密与加固逻辑

理解 Virbox Protector(简称 VBP),不必一上来就拆解“加密”“加壳”或“防破解”这些词。更好的切入口,是软件交付。 在开发阶段,源代码、构建环境、测试流程和访问权限大多还留在企业内部。程序发布后,边…

作者头像 李华
网站建设 2026/7/2 5:33:57

Certbot:免费自动化 HTTPS 证书管理工具

文章目录Certbot:免费自动化 HTTPS 证书管理工具Certbot:免费自动化 HTTPS 证书管理工具 EFF 开源的 HTTPS 证书管理工具 Certbot,在 GitHub 上获得了 33k 的 Star: Certbot 是 EFF(电子前哨基金会)推出的…

作者头像 李华
网站建设 2026/7/1 2:52:28

从CTF靶场实战解析SQL注入原理与参数化查询防御

1. 项目概述:从靶场实战理解SQL注入的本质最近在带新人入门网络安全,发现很多朋友对SQL注入的理解还停留在“万能钥匙”‘ or ‘1’‘1的阶段,知其然不知其所以然。正好,我最近在重温一个非常经典的CTF靶场题目——Hack World 1。…

作者头像 李华