message与注释

常规用法

# 单行注释
#[[
注释
注释
...
]]

cmake_minimum_required(VERSION 3.20)
project(message)

message(参数)
message(参数1 参数2)

message("参数 参数")

message日志级别

错误级别

message(FATAL_ERROR "TEST FATAL_ERROR")
message("afger fatal_error")
message(SEND_ERROR "SEND ERROR") # 生成退出(不会生成项目文件), cmake继续执行
message("afger send_error")

其它

message(WARNING "warning")
message(NOTICE "NOTICE") # 等同于不加
message(STATUS "STATUS") # --STATUS
# 之后的级别,默认不显示 ,需要指定 --log-level=xxx
message(VERBOSE "VERBOSE") # cmake -S . -B buuild --log-level=VERBOSE
message(DEBUG "DEBUG") # cmake -S . -B buuild --log-level=DEBUG
message(TRACE "TRACE") # cmake -S . -B buuild --log-level=TRACE
# cmake -S . -B buuild --log-level=TRACE > log.txt 重定向标准输出
# cmake -S . -B buuild --log-level=TRACE > log.txt 2>&1 错误重定向到标准输出
# cmake -S . -B buuild --log-level=TRACE 2> log.txt 重定向错误输出

在命令行中指定级别

cmake --log-level=<FATAL_ERROR|SEND_ERROR|WARNING|NOTICE|STATUS|VERBOSE|DEBUG|TRACE>

查找模块的日志 --可 嵌套

# message(<checkState> "message")
#[[
checkState
- CHECK_START
- CHECK_PASS
- CHECK_FAIL
]]

cmake_minimum_required(VERSION 3.20)
project(message)

set(CMAKE_MESSAGE_INDENT "--") # 设置缩进

message(CHECK_START "Find xcpp")

message(CHECK_START "xlog")

message(CHECK_START "xthreadPool")

message(CHECK_FAIL "Faile")

message(CHECK_PASS "xlog pass")
set(CMAKE_MESSAGE_INDENT "") # 缩进取消
message(CHECK_FAIL "CHECK FAIL")

set变量

  • 变量大小写敏感
  • 嵌套求值
set(VAR1 "测试变量的值")
# 访问变量, 有些指令不需要加${}
message(${VAR1})

message("字符串中取变量 ${VAR1}")
message("使用转义 \${VAR1} ${VAR1}")


# 嵌套求值
set(VAR2 "VAR1")
message("嵌套求值: ${${VAR2}}")

# 大小写敏感
message("大小写敏感: ${VAr1}")

unset(VAR1)
message("unset ${VAR1}")

使用变量让message输出不同的颜色

设置格式

\033[1;31;40m 1 显示方式, 前景色 31 红, 背景色 40
\033[0m 取消

显示方式:

  • 0 默认
  • 1 高亮
  • 4 下划线
  • 5 闪烁
  • 7 反白
  • 8 不可见

颜色




30

40

black

31

41

red

32

42

green

33

43

yellow

34

44

blue

35

45

orange

36

46

sky blue

37

47

white

string(ASCII 27 Esc)
set(Red "${Esc}[1;31;47m")
set(End "${Esc}[0m")
message ("${Red} 红色 ${End} 没有颜色")

cmake​自带的变量和给c++传递变量

# PROJECT_NAME  -- project(xxx)
# BUILD_SHARED_LIBS -- 缓存变量 ON OFF 共享库编译开关 add_library(XXX YYYY)
# 描述系统
# -- MSVC >>>> 1 或 none
# -- WIN32 >>>> 1 或 none
# -- ANDROID >>>> 1 或 none
# -- UNIX >>>> 1 或 none

# -- CMAKE_SYSTEM_NAME -- Linux

# CMAKE_COLOR_MAKEFILE -- ON / OFF

给c++传递变量

# 相当于 -DXXX=YYY
add_definitions(-DFOO_HELLO="I LOVE YOU")
add_executable(message main.cpp)
#include <iostream>

using namespace std;

int main(){
cout << "hello" << endl;
#ifdef FOO_HELLO
cout << "test :" << FOO_HELLO << endl;
#endif
return 0;
}

include

抽取公共代码

include(abc.cmake OPTIONAL RESULT_VARIABLE ABC_RESULT)
message(${ABC_RESULT})
  • 如果​​abc.cmake​​找到 ABC_REAULT = 文件路径,否则 NOTFOUND
  • OPTIONAL 有此参数,即没找到出不会报错
  • 作用类似于c++ 的​​#include <xxxx>​

自动载源码 / 自动导入头文件

file(GLOB H_FILE "./*.h")
aux_source_directory("." SRC_SOURCE) # 所有.c .cxx .cpp 文件
message(${H_FILE})
message(${SRC_SOURCE})
add_executable(message ${SRC_SOURCE})

分步编译和清理指定target

cmake --build . --target help # 查看目标
cmake --build . --target clean

调试打印生成日志

set(CMAKE_VERBOSE_MAKEFILE ON)
cmake --build . -v

设置输出路径

  • 库输出路径 ​​CMAKE_LIBRARY_OUTPUT_DIRECTORY​​ -- .so
  • 归档输出路径 ​​CMAKE_ARCHIVE_OUTPUT_DIRECTORY​​ -- window .lib , linux .a
  • 执行程序输出路径 ​​CMAKE_RUNTIME_OUTPUT_DIRECTORY​​ -- 执行程序和dll库

add_subdirectory

# 上层
cmake_minimum_required(VERSION 3.20)
project(xlog_test)
add_subdirectory(xlog)
add_executable(xlog_test test_xlog/main.cpp xlog)
target_link_libraries(xlog_test xlog)
# xlog 子目录
cmake_minimum_required(VERSION 3.20)
project(xlog)
add_library(xlog SHARED xlog.cpp xlog.h)
target_include_directories(xlog INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})