CMake系统学习2 -- CMake常用功能
原创
©著作权归作者所有:来自51CTO博客作者luan_225的原创作品,请联系作者获取转载授权,否则将追究法律责任
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})