(十三)CMake MESSAGE和PROJECT

2023-10-31

一、MESSAGE

MEESSAGE的功能是记录一个信息。当我们执行“编译”含有message命令的代码时,将会在终端打印指定内容。如果超过一个信息字符串,它将会拼接成一个信息(无缝连接)。

MESSAGE报告的信息可以是:

  • 普通信息
  • 报告检查信息

这里只了解前者:

message([<mode>] "message text" ...)

其中mode是信息的类型,他将会影响CMake接下来的处理。

其基本语法是:

  • 普通信息:message([<mode>] "message text" ...)
  • 报告检查:message(<checkState> "message text" ...)

普通信息可以分为不同层次:

  • FATAL_ERROR CMAKE 错误,停止处理和产生
  • SEND_ERROR CMAKE 错误,继续处理但不产生
  • WARNING 继续处理(留空的默认值)
  • AUTHOR_WARNING CMAKE 警告,继续处理
  • DEPRECATION 是警告还是错误取决于 CMAKE_ERROR_DEPRECATED 或者CMAKE_WARN_DEPRECATED
  • NOTICE或空 表示重要标准错误引起用户注意
  • STATUS 用户可能感兴趣的信息,该信息应该不超过一行简明扼要

在3.17版本后,新出现的信息为报告检查信息,其语法是:

message(<checkState> "message text" ...)
  • VERBOSE 更详细的信息,这些信息大部分人都不感兴趣,除非你是一个项目构建人员
  • DEBUG 项目本身开发人员,而不是那些只想编译的人员。
  • TRACE 临时信息

一个非常简单的例子:

cmake_minimum_required(VERSION 3.22)
project(Demo)

set(CMAKE_CXX_STANDARD 14)
message(hello)
add_executable(untitled main.cpp)

打印的结果如下:
在这里插入图片描述

二、PROJECT

设置一个项目的名字。语法如下:

project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])

使用project命令的同时,cmake处理器还同时还设置了几个变量:

自动定义的变量名
PROJECT_SOURCE_DIR, <PROJECT-NAME>_SOURCE_DIR Absolute path to the source directory for the project.
PROJECT_BINARY_DIR, <PROJECT-NAME>_BINARY_DIR Absolute path to the binary directory for the project.
PROJECT_IS_TOP_LEVEL, <PROJECT-NAME>_IS_TOP_LEVEL 是否为最顶层New in version 3.21.

例子

PROJECT(projectname [CXX][C][Java])

命令用于指示名称,并且可以指定工程支持的语言,通常可以忽略。隐式定义了两个CMake变量,分别是:

  • <projectname>_BINARY_DIR
  • <projectname>_SOURCE_DIR

上面的两个变量第一个下划线前的字符串等于PROJECT里面的字符串。为了打印两个CMake变量,需要用到MESSAGE打印字符串。

Project(HELLO)
SET(SRC_LIST main.cpp)
MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})

利用cmake程序“编译”CMakeLists.txt文件,运行的结果如下,可以看到MESSAGE命令打印了变量的值,似乎都等于当前CMakeLists.txt所在目录。

-- This is BINARY dir /home/junwu/Project/CMakeTest
-- This is SOURCE dir /home/junwu/Project/CMakeTest
-- Configuring done
-- Generating done
-- Build files have been written to: /home/junwu/Project/CMakeTest

[1] https://www.cnblogs.com/52php/p/5681745.html

【20220623】 重新整理了message部分描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(十三)CMake MESSAGE和PROJECT 的相关文章

  • CMake 未添加 ASM_MASM 的预处理器定义

    在使用以下 cmake 生成的构建系统 Visual Studio 2017 Generator 中 test asm 源文件不是使用预处理器定义 MY MASM DEFINITION 进行编译的 cmake minimum require
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • VS 2015 命令提示符中不再找到 rc.exe

    我刚刚安装了 Windows 10 创意者更新 版本 10 0 15063 我安装了多个版本的 Visual Studio 2012 2013 2015 和 2017 我几周前才安装了 VS 2017 Problem CMake 版本 3
  • 使用 CMAKE (VISUAL STUDIO) 链接调试和发布库

    已经有一个Thread https stackoverflow com q 2209929 293195这并没有真正帮助 我希望能够链接例如Foo lib for Release配置和Foo d lib for Debug配置 我怎样才能实
  • 引用的项目在编译时“丢失”

    我有一个包含两个项目的 C 解决方案 一个服务 主项目 和一个记录器 该服务使用记录器中的类 我在服务项目中添加了对记录器项目的引用 在设计时 自动完成工作正常 记录器的类是可见的 我使用的引用具有适当的颜色 我重建解决方案 但出现问题 不
  • CMake 错误“找不到要添加属性的目标”

    在我的 CMakeLIsts txt 文件中我这样写 set LIBHELLO SRC hello c set target properties hello static PROPERTIES OUTPUT NAME hello get
  • CMake 64 位和 SFML 64 位

    我正在尝试使用适用于 Windows 的 CMake 64 位和 SFML 2 5 1 64 位构建 C 项目 当我在项目上运行 cmake 时 我收到一条错误消息 我能让它工作的唯一方法是改变CMAKE PREFIX PATH指向 SFM
  • 单个 CMakeLists.txt 足以满足我的项目需求吗?

    我正在尝试将旧的 CMake 移植到现代 CMake CMake 3 0 2 或更高版本 在旧的设计中 我有多个 CMakelists txt 每个目录都包含一个 CMakeLists txt 文件 我当前项目的目录结构如下所示 VizSi
  • 消息循环如何使用线程?

    我有点困惑 想知道我是否被误导了 在另一篇文章中 我被告知 只有当你显式创建新线程时才会创建它们 C 程序默认是单线程的 当我打开未在 ollydbg 中显式创建新线程的程序时 我多次注意到通常有 2 个线程在运行 我想了解消息循环如何在不
  • Qt5 CMake 将所有库包含到可执行文件中

    我正在尝试使用 Qt 5 14 构建一个发布模式下的应用程序 并且 Qt Creator 内部一切正常 但是当我尝试单独运行可执行文件时 我收到如下错误 OS Windows 10 Qt 5 14 Cmake 3 5 我尝试过的 设置 CM
  • fbtorch:cmake 找不到 torch 目录

    我正在尝试构建并安装 fbtorch 但是当我使用 cmake 时出现以下错误 CMake Error at CMakeLists txt 9 FIND PACKAGE By not providing FindTorch cmake in
  • 为什么 CMake 没有检测到对我生成的文件的依赖关系?

    我正在尝试使用自定义命令生成标头 每次重建时都应更新标头 以便包含它的源文件也将被重建 实际命令是一个脚本 但这里是一个简化版本 这是我的项目 CMakeLists txt cmake minimum required VERSION 2
  • CMake:将为 lib 构建的对象文件重用到另一个 lib 目标中

    我正在尝试将我的项目转移到CMake 同时对编译过程进行一些优化 这是交易 我有几个子目录 必须 每个子目录都编译成静态库 这有效 我想将每个子目录中的所有目标文件收集到另一个更大的 完整的静态库中 它看起来像这样 libBig a mad
  • 为dlib创建共享库

    按照说明使用 cmake 编译 dlib here http dlib net compile html 生成静态 dlib 库 cd examples mkdir build cd build cmake cmake build conf
  • 如何在cmake中添加cuda源代码的定义

    我使用的是 Visual Studio 2013 Windows 10 CMake 3 5 1 一切都可以使用标准 C 正确编译 例如 CMakeLists txt project Test add definitions D WINDOW
  • Cmake 链接到共享库找不到​​库

    在 Ubuntu 上 我有两个目录 build and src In src my CMakeLists txt文件有以下几行 add executable Test main cpp target link libraries Test
  • cmake 找不到 boost 库,因为它查找错误的文件名

    我根据文档在 Windows 8 1 机器上构建了 boost 1 56 库 作为共享库和静态库 他们全部出现在BOOST ROOT stage lib目录 文件名格式如下 boost thread vc120 mt 1 56 dll bo
  • 使用 target_link_libraries 以绝对路径作为库路径进行平台库名称扩展?

    在 CMake 中使用 target link libraries 仅使用库名称 例如 target link library myProject SomeLibrary 将根据平台将 SomeLibrary 扩展为 SomeLibrary
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • 构建错误:depfile 有多个输出路径 ninja:构建停止:子命令失败

    我在使用需要 CMake 支持的 JNI 代码构建 Java 项目时遇到此错误 该项目使用Android Studio构建 并得到NDK CMake和LLVM的支持 这些是 CMake 使用的以下标志 我实际上使用了作为 C 项目创建的项目

随机推荐

  • 【华为OD机试真题】94、猜密码

    文章目录 一 题目 题目描述 输入输出 样例1 二 代码与思路参考 C语言思路 C代码 C 语言思路 C 代码 Java语言思路 Java代码 Python语言思路 Python代码
  • 13-集合框架

    引言 集合框架 理解为集合体系指的是由很多类共同构成 这些类之间存在关系 继承或实现 是成体系的类和接口 一 认识集合 在java程序中 集合是存放数据的容器 它数组一样 但是但是 是存在差异的 从使用上说 集合更为方便 因为集合容量会随着
  • LTP--Linux Test Project

    简介 LTP套件是由 Linux Test Project 所开发的一套系统测试套件 它基于系统资源的利用率统计开发了一个测试的组合 为系统提供足够的压力 通过压力测试来判断系统的稳定性和可靠性 压力测试是一种破坏性的测试 即系统在非正常的
  • element upload限制图片上传格式

    限制图片的格式 html部分 点击选择图片的正常操作是只会出现图片格式 如果选择所有文件 我们就要重新进行验证 在选择照片的时候我们就要进行判断 所以是在on change事件中判断是否为照片格式 先封装一个isImage方法 isImag
  • 【笔试面试真题】Java实现数列还原

    题目描述 牛牛的作业薄上有一个长度为 n 的排列 A 这个排列包含了从1到n的n个数 但是因为一些原因 其中有一些位置 不超过 10 个 看不清了 但是牛牛记得这个数列顺序对的数量是 k 顺序对是指满足 i lt j 且 A i lt A
  • 【JavaWeb】Servlet,Request,Responce

    JavaWeb 核心技术 目录 Tomcat 1 安装配置目录使用部署创建 2 idea集成Tomcat Servlet Servlet快速入门 Servlet生命周期 Servlet体系结构 Servlet urlPattern配置 XM
  • 判断当前日期是否在[startDate, endDate]区间

    原文地址 http www cnblogs com linjiqin p 5569601 html 判断当前日期是否在 startDate endDate 区间 param startDate 开始日期 param endDate 结束日期
  • C语言实现输出九九乘法表

    代码如下 include
  • Jmeter之设置用户token为全局变量(超详细,保证你会)

    1 打开jmeter之后新增一个线程组 路径 Test Plan Add Theads user Thread Group 2 添加了线程组之后 在线程组下面添加一个sampler 取样器 就是HTTP request 3 在http请求里
  • 程序员应该掌握的10个搜索技巧

    程序员应该掌握的10个搜索技巧 txt 程序员应该掌握的10个搜索技巧 txt Google搜索 1 准确搜索 2 排除关键词 3 用 Either OR 或 逻辑进行搜索 4 同义词搜索 5 在站内进行搜索 6 善用星号 7 在两个数值之
  • java log 封装_工具类之LogUtils

    安卓开发离不开记录log日志 封装了一份简单的日志工具类 具有设置日志总开关 是否写入文件 日志过滤器和自定义标签 锁定打印log的类 函数名及行号 初始化有可以使用init函数也可以使用建造者模式 具体使用参看单元测试 站点 init 初
  • 在ubuntu下安装VScode,配置PCL文件库问题

    安装过程直接忽略 可以在官网直接下载安装 Download Visual Studio Code Mac Linux Windows 安装完成后在桌面新建一个文件夹和一个 cpp文件 右键文件夹 选择使用VScode打开 安装中文包 安装C
  • 华为OD2023(A卷)基础题26【最大利润、贪心的商人】

    题目 最大利润 商人经营一家店铺 有number种商品 由于仓库限制每件商品的最大持有数量是item index 每种商品的价格是item price item index day 通过对商品的买进和卖出获取利润 请给出商人在days天内能
  • qcharts控件如何提升

    条件 qt5 9版本以后 编译器也要对应的新版本 否则无法释放该版本qt库的所有功能 已经下载了qtcharts模块 如果安装qt时候没有勾选 则打开安装目录的MaintenanceTool exe软件 重新将qtcharts模块勾选上安装
  • R-Drop和SimCSE解读

    R Drop Regularized Dropout for Neural Networks R Drop的基本思想是 同一个step里面 对于同一个样本 前向传播两次 由于Dropout的存在 会得到两个不同但差异很小的概率分布 通过在原
  • JavaScript中远程级联调用(RPC)java对象中的方法并返回结果

    http code google com p json rpc for java downloads list
  • 如何修改服务器远程端口

    1 开始 运行 regedit 2 依次展开 HKEY LOCAL MACHINE SYSTEM CURRENTCONTROLSET CONTROL TERMINAL SERVER WDS RDPWD TDS TCP 右边键值中 PortN
  • Stm32f030 双串口

    void USART INIT void GPIO InitTypeDef GPIO InitStructure USART InitTypeDef USART InitStructure NVIC InitTypeDef NVIC Ini
  • Ubuntu 安装 conda

    下载 Anaconda 进入 Ubuntu 自己新建下载路径 输入以下命令开始下载 注意 如果不是 x86 64 需要去镜像看对应的版本 https mirrors bfsu edu cn anaconda archive C M O A
  • (十三)CMake MESSAGE和PROJECT

    一 MESSAGE MEESSAGE的功能是记录一个信息 当我们执行 编译 含有message命令的代码时 将会在终端打印指定内容 如果超过一个信息字符串 它将会拼接成一个信息 无缝连接 MESSAGE报告的信息可以是 普通信息 报告检查信