news 2026/1/10 18:41:14

cmake_CMake打印消息命令message(),CMAKE_SOURCE_DIR、CMAKE_BINARY_DIR,CMAKE_CURRENT_LIST_FILE/DIR/LINE/FILE

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cmake_CMake打印消息命令message(),CMAKE_SOURCE_DIR、CMAKE_BINARY_DIR,CMAKE_CURRENT_LIST_FILE/DIR/LINE/FILE

文章目录

  • 第二章 CMake基础语法
    • 2.12 CMake打印消息命令message()
      • 2.12.1 message()命令格式
      • 2.12.2 设置日志等级CMAKE_MESSAGE_LOG_LEVEL
      • 2.12.3 测试源码
    • 2.13 CMAKE_SOURCE_DIR、CMAKE_BINARY_DIR
      • 2.13.1 测试顶层 CMAKE SOURCE变量
      • 2.13.2 测试顶层BINARY相关变量
    • 2.14 CMAKE_CURRENT_LIST_FILE/DIR/LINE/FILE
    • 2.15 CMake定义环境变量set( ENV{} )命令
      • 2.15.1 获取OS环境变量
      • 2.15.2 修改环境变量
      • 2.15.3 CMAKE内置环境变量
      • 2.15.4 编译时指定的变量

本文记录CMake打印消息命令message(),CMAKE_SOURCE_DIRCMAKE_BINARY_DIR,CMAKE_CURRENT_LIST_FILE/DIR/LINE/FIL。

第二章 CMake基础语法

2.12 CMake打印消息命令message()

2.12.1 message()命令格式

message()用于输出消息到控制台,参数指定消息模式,如果给出多个消息字符串,它们将连接成一条消息,字符串之间没有分隔符。
message原型:

message([<mode>]"message text')mode参数: TRACE:临时的、实现细节的细粒度消息 DEBUG 为开发人员提供的调试消息, VERBOSE 为用户提供的详细的(冗长的)消息。 STATUS 用户可能感兴趣的消息。 NOTICE 或 不写: 重要消息打印到stderr以吸引用户注意 DEPRECATION 弃用错误或警告消息 AUTHOR WARNING 开发者警告消息,继续处理, WARNING 警告消息,继续处理, SEND ERROR 错误消息,CMake继续处理,但跳过生成, FATAL ERROR 致命错误消息,CMake停止处理和生成。

2.12.2 设置日志等级CMAKE_MESSAGE_LOG_LEVEL

设置此变量指定message()命令的日志记录级别,可设置的值为ERROR WARRING NOTICE, STATUS(默认),VERBOSE DEBUG TRACE
设置日志等级时可以使用 cmake –log-level=XXX
日志从高到低:

ERROR>WARNING>NOTICE>STATUS(默认)>VERBOSE>DEBUG>TRACE

设置日志级别后,message只会输出指定日志级别或更高日志级别。比如指定最高的ERROR日志级别后,只输出EEROR级别的message。

2.12.3 测试源码

cmake_minimum_required(VERSION3.22)# 设置日志等级set(CMAKE_MESSAGE_LOG_LEVEL ERROR)# 获取默认日志等级cmake_language(GET_MESSAGE_LOG_LEVEL var)message("日志级别:${var}")# 日志级别: TRACE# 显示日志message(TRACE 测试TRACE消息)message(DEBUG 测试DEBUG消息)message(VERBOSE 测试VERBOSE消息)message(STATUS 测试STATUS消息)# 输出:-- 测试STATUS消息(前边多了两个--)message(NOTICE 测试NOTICE消息)# 输出:测试NOTICE消息(前边没有空格)message(DEPRECATION 测试DEPRECATION消息)# 输出: 测试DEPRECATION消息(前边多两个空格)message(AUTHOR_WARNING 测试AUTHOR_WARNING消息)# 输出: 测试AUTHOR_WARNING消息(前边多两个空格)message(WARNING 测试WARNING消息)# 输出: 测试WARNING消息(前边多两个空格)message(SEND_ERROR 测试SEND_ERROR消息)# 输出: 测试SEND_ERROR消息(前边有两个空格)message(FATAL_ERROR 测试FATAL_ERROR消息)# 输出: 测试FATAL_ERROR消息(前边有两个空格)

2.13 CMAKE_SOURCE_DIR、CMAKE_BINARY_DIR

2.13.1 测试顶层 CMAKE SOURCE变量

CMAKE_SOURCE_DIR:顶层CMakeLists.txt 文件所在的目录,根目录。
PEOJECT_SOURCE_DIR : 最近调用Project() 命令所在CMakeLists.txt目录
CMAKE_CURRENT_SOURCE_DIR : 当前正在处理的CMakeLists.txt 文件所在的目录
PROJECT_IS_TOP_LEVEL 最近调用的project() 命令是否位于顶层CMakeLists.txt文件中;
测试:

cmake_minimum_required(VERSION3.30)# 项目project(sourceCmake VERSION1.1LANGUAGES CXX)# 测试 source 相关的变量# 测试是否为顶层cmakemessage("顶层 PROJECT_IS_TOP_LEVEL =${PROJECT_IS_TOP_LEVEL}")# 顶层 PROJECT_IS_TOP_LEVEL = ONmessage("CMAKE_SOURCE_DIR =${CMAKE_SOURCE_DIR}")# CMAKE_SOURCE_DIR = E:/cmakeLearning/chap2/8cmakesourcemessage("PROJECT_SOURCE_DIR =${PROJECT_SOURCE_DIR}")# PROJECT_SOURCE_DIR = E:/cmakeLearning/chap2/8cmakesourcemessage("sourceCmake_SOURCE_DIR =${sourceCmake_SOURCE_DIR}")# sourceCmake_SOURCE_DIR = E:/cmakeLearning/chap2/8cmakesourcemessage("CMAKE_CURRENT_SOURCE_DIR =${CMAKE_CURRENT_SOURCE_DIR}")# CMAKE_CURRENT_SOURCE_DIR = E:/cmakeLearning/chap2/8cmakesource

2.13.2 测试顶层BINARY相关变量

CMAKE_BINARY_DIR 顶层项目对应的二进制目录,即cmake -B 命令指定的一个名为build的目录;
PROJECT_BINARY_DIR :指向最近通过project() 命令定义的项目的对应的二进制目录;
项目名_BINARY_DIR : project(项目名) 命令对应的二进制目录;
CMAKE_CURRENT_BINARY_DIR :当前正在处理的项目对应的二进制目录;

message("CMAKE_BINARY_DIR =${CMAKE_BINARY_DIR}")# CMAKE_BINARY_DIR = E:/cmakeLearning/chap2/8cmakesource/buildmessage("PROJECT_BINARY_DIR =${CMAKE_BINARY_DIR}")# PROJECT_BINARY_DIR = E:/cmakeLearning/chap2/8cmakesource/buildmessage("CMAKE_CURRENT_BINARY_DIR =${CMAKE_CURRENT_BINARY_DIR}")# CMAKE_CURRENT_BINARY_DIR = E:/cmakeLearning/chap2/8cmakesource/build

2.14 CMAKE_CURRENT_LIST_FILE/DIR/LINE/FILE

下面的变量操作CMakeLists.txt 所在的目录。
CMAKE_CURRENT_LIST_FILE 当前正在处理的CMakeLists.txt文件或者脚本文件.cmake所在的完整路径。(路径+文件名)
CMAKE_CURRENT_LIST_DIR 当前正在处理的CMakeLists.txt文件所在的目录
CMAKE_CURRENT_LIST_LINE 当前正在处理的CMakeLists.txt文件内容的行号。
CMAKE_PARENT_LIST_FILE 在处理由 include() 或 find_package() 加载的 CMake脚本文件时,此变量显示它的父文件完整路径。

cmake_minimum_required(VERSION3.30)# 项目project(sourceCmake VERSION1.2LANGUAGES CXX)# 正在处理的脚本的完整路径。message("CMAKE_CURRENT_LIST_FILE =${CMAKE_CURRENT_LIST_FILE}")# CMAKE_CURRENT_LIST_FILE = E:/cmakeLearning/chap2/9currentlist/CMakeLists.txt# 正在处理cmake所有目录message("CMAKE_CURRENT_LIST_DIR =${CMAKE_CURRENT_LIST_DIR}")# CMAKE_CURRENT_LIST_DIR = E:/cmakeLearning/chap2/9currentlist# 当前行号message("CMAKE_CURRENT_LIST_LINE =${CMAKE_CURRENT_LIST_LINE}")# CMAKE_CURRENT_LIST_LINE = 11# 父目录message("CMAKE_PARENT_LIST_FILE =${CMAKE_PARENT_LIST_FILE}")# CMAKE_PARENT_LIST_FILE = E:/cmakeLearning/chap2/9currentlist/CMakeLists.txt

2.15 CMake定义环境变量set( ENV{} )命令

CMake定义了环境变量来控制CMake的行为,设置的环境变量仅在当前CMAKE进程中生效,而不影响调用CMake的进行,也不影响整个系统环境,也不会影响后续构建或测试进程的环境。
定义环境变量:

set(ENV{变量名}[])

引用环境变量:

$ENV{变量名}

2.15.1 获取OS环境变量

获取当前的系统OS,获取OS的环境变量PATH,获取用户名USERNAME。

cmake_minimum_required(VERSION3.30)# 项目project(sourceCmake VERSION1.2LANGUAGES CXX)# 获取OS的环境变量message("OS =$ENV{OS}")# OS = Windows_NTmessage("PATH =$ENV{PATH}")# 输出的环境变量在windows下是 PATH中的所有路径message("USERNAME =$ENV{USERNAME}")# USERNAME = Administrator

2.15.2 修改环境变量

修改系统的环境变量只对本文件有影响,对其他文件其他进程无影响。相当于于次临时修改。

set(ENV{PATH}"C:/Program")message(PATH=$ENV{PATH})# PATH=C:/Program

可以看出环境变量和普通变量是两个不同变量。

# 环境变量与普通变量区别set(ENV{CMAKE_INCLUDE_PATH}"C:\\Windows")set(CMAKE_INCLUDE_PATH"C:\\Users")message(环境变量CMAKE_INCLUDE_PATH=$ENV{CMAKE_INCLUDE_PATH})# 环境变量CMAKE_INCLUDE_PATH=C:\Windowsmessage(普通变量CMAKE_INCLUDE_PATH=${CMAKE_INCLUDE_PATH})# 普通变量CMAKE_INCLUDE_PATH=C:\Users

2.15.3 CMAKE内置环境变量

CMAKE_INCLUDE_PATH :使用此环境变量指定find_file()和 find_path()命令额外搜索的目录列表。 CMAKE_LIBRARY_PATH:使用此环境变量指定find_library()命令额外搜索的目录列表; CMAKE_PREFIX_PATH : 使用此环境变量指定查找已安装软件目录额外的前缀列表, find_program()命令会使用<prefix>/bin 搜索; find_library()命令会使用<prefix>/lib 搜索; find_file()命令会使用<prefix>/include 搜索。 CMAKE_PROGRAM_PATH :使用此变量指定find_program()命令额外的搜索目录列表;

测试:

message("CMAKE_INCLUDE_PATH =${CMAKE_INCLUDE_PATH}")# CMAKE_INCLUDE_PATH =message("CMAKE_LIBRARY_PATH =${CMAKE_LIBRARY_PATH}")# CMAKE_LIBRARY_PATH =message("CMAKE_PREFIX_PATH =${CMAKE_PREFIX_PATH}")# CMAKE_PREFIX_PATH =message("CMAKE_PROGRAM_PATH =${CMAKE_PROGRAM_PATH}")# CMAKE_PROGRAM_PATH =

2.15.4 编译时指定的变量

下面的生成器变量,编译类型变量和安装类型变量会影响普通变量。普通变量和环境变量会作为一个变量。
CMAKE_GENERATOR : 指定用于构建项目的生成器,比如Ninja, VS灯。
设置方法:

# 生成 Ninja 构建文件cmake -S.-B build -G"Ninja"# 生成 VS 2022 工程cmake -S.-B build -G"Visual Studio 17 2022"

CMAKE_BUILD_TYPE : 编译类型,需要设置默认值,比如Debug release类型。
编译类型:编译为Release版本。

cmake -S.-B build -DCMAKE_BUILD_TYPE=Release

实际项目使用:

if(NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Debug CACHE STRING"选择编译类型"FORCE)endif()message("CMAKE_BUILD_TYPE =${CMAKE_BUILD_TYPE}")# CMAKE_BUILD_TYPE = Debug

CMAKE_INSTALL_PREFIX(安装路径):使用此变量指定CMAKE_INSTALL_PREFIX,指定的值必须是绝对路径,指定软件安装的位置。
cmakeLists.txt中:

cmake_minimum_required(VERSION3.30)# 项目project(sourceCmake VERSION1.2LANGUAGES CXX)if(NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Debug CACHE STRING"选择编译类型"FORCE)endif()message("CMAKE_BUILD_TYPE =${CMAKE_BUILD_TYPE}")# CMAKE_BUILD_TYPE = Debugset(sourcecpp main.cpp)add_executable(sourceCmake${sourcecpp})install(TARGETS sourceCmake DESTINATION bin)// 安装目录

编译方式如下:

# 1 ,指定一个明确的绝对路径cmake -S.-B build -DCMAKE_INSTALL_PREFIX="E:/cmakeLearning/chap2/10env/install"# 2. 编译cmake --build build --config Release# 3 安装cmake --install build --config Release
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/22 4:00:05

29、中小企业适用的 Linux 发行版推荐

中小企业适用的 Linux 发行版推荐 在中小企业的 IT 环境中,选择合适的 Linux 发行版至关重要。这些发行版不仅要提供出色的桌面体验,还需搭配实用的后台办公解决方案。同时,它们要与企业内部的 Windows 用户以及外部的客户和供应商保持良好的互操作性,并且可能具备一些大型…

作者头像 李华
网站建设 2025/12/22 4:00:00

33、教育与技术:Siceroo Zodiac及Knoppix的应用指南

教育与技术:Siceroo Zodiac及Knoppix的应用指南 1. Siceroo Zodiac薄客户端解决方案 Siceroo推出了Zodiac来应对相关挑战。Zodiac是Siceroo的薄客户端解决方案,它采用开放标准和一流技术,关键在于利用开源和网络计算技术结合超薄客户端。 1.1 技术优势 适合远程管理 :…

作者头像 李华
网站建设 2025/12/22 3:58:51

Excalidraw首屏加载性能评分及提升策略

Excalidraw首屏加载性能评分及提升策略 在现代 Web 应用中&#xff0c;用户对“打开即用”的期待已经不再是加分项&#xff0c;而是基本要求。尤其对于像 Excalidraw 这类强调即时创作与协作的虚拟白板工具&#xff0c;哪怕多出一秒的等待&#xff0c;都可能让用户转而选择其他…

作者头像 李华
网站建设 2026/1/5 11:21:45

Excalidraw手绘风格背后的渲染技术原理剖析

Excalidraw手绘风格背后的渲染技术原理剖析 在数字协作日益深入的今天&#xff0c;一张草图可能比十页文档更能激发团队的共鸣。尤其是在远程会议、系统设计或产品原型讨论中&#xff0c;可视化表达早已不是“锦上添花”&#xff0c;而是沟通效率的核心杠杆。然而&#xff0c;…

作者头像 李华
网站建设 2025/12/22 3:49:58

5、Windows XP 文件与网络操作全攻略

Windows XP 文件与网络操作全攻略 1. 添加网络位置 在 Windows XP 中,若要添加网络位置的快捷方式到“网上邻居”窗口,可按以下步骤操作: 1. 确保在“服务提供商”列表框中,“其他网络连接”“指定网站地址、网络位置或 FTP 站点”处于高亮状态,然后点击“下一步”按钮…

作者头像 李华
网站建设 2025/12/22 3:49:57

夸克网盘加速_下载提速

今天教大家一招能解决夸克网盘限制的在线工具。这个工具也是完全免费使用的。下面让大家看看我用这个工具的下载速度咋样。地址获取&#xff1a;放在这里了&#xff0c;可以直接获取 这个速度还是不错的把。对于平常不怎么下载的用户还是很友好的。下面开始今天的教学 输入我给…

作者头像 李华