一、MESSAGE
MEESSAGE的功能是记录一个信息。当我们执行“编译”含有message命令的代码时,将会在终端打印指定内容。如果超过一个信息字符串,它将会拼接成一个信息(无缝连接)。
MESSAGE报告的信息可以是:
- 普通信息
- 报告检查信息
这里只了解前者:
message([] "message text" ...)
其中mode是信息的类型,他将会影响CMake接下来的处理。
其基本语法是:
- 普通信息:
message([] "message text" ...)
- 报告检查:
message( "message text" ...)
普通信息可以分为不同层次:
- FATAL_ERROR CMAKE 错误,停止处理和产生
- SEND_ERROR CMAKE 错误,继续处理但不产生
- WARNING 继续处理(留空的默认值)
- AUTHOR_WARNING CMAKE 警告,继续处理
- DEPRECATION 是警告还是错误取决于 CMAKE_ERROR_DEPRECATED 或者CMAKE_WARN_DEPRECATED
- NOTICE或空 表示重要标准错误引起用户注意
- STATUS 用户可能感兴趣的信息,该信息应该不超过一行简明扼要
在3.17版本后,新出现的信息为报告检查信息,其语法是:
message( "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(
[VERSION [.[.[.]]]]
[DESCRIPTION ]
[HOMEPAGE_URL ]
[LANGUAGES ...])
使用project命令的同时,cmake处理器还同时还设置了几个变量:
自动定义的变量名PROJECT_SOURCE_DIR
, _SOURCE_DIR
Absolute path to the source directory for the project.PROJECT_BINARY_DIR
, _BINARY_DIR
Absolute path to the binary directory for the project.PROJECT_IS_TOP_LEVEL
, _IS_TOP_LEVEL
是否为最顶层New in version 3.21.
例子
PROJECT(projectname [CXX][C][Java])
命令用于指示名称,并且可以指定工程支持的语言,通常可以忽略。隐式定义了两个CMake变量,分别是:
_BINARY_DIR
_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部分描述