1 CMake注释
1.1 单行注释
- CMake中单行注释时以 # 开头。
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 这是注释 project(myproject)
1.2 多行注释
- 多行注释时,以 #[[ 开头,以 ]] 结尾,中间都可以写注释内容。3.0之前的版本不支持。
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) #[[ 这是注释 这也是注释 ]] project(myproject)
2 CMake Message 日志打印
- CMake中的Message主要用于打印日志。
2.1 基础日志打印
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印===") message("===arg1===" "===arg2===")
-
- 打印结果
2.2 指定日志级别
- Message支持打印日志级别
- 日志级别有以下几种
- FATAL_ERROR: 停止cmake运行和生成
- SEND_ERROR: cmake继续运行,生成跳过
- WARNGING: 打印警告信息
- NOTICE: 日志级别默认为NOTICE
- STATUS: 针对项目用户的信息
- VERBOSE: 针对项目用户的详细信息
- DEBUG
- TRACE
- 可通过 –log-level 参数指定日志级别,默认打印的是 STATUS 级别,即 VERBOSE、DEBUG和TRACE级别不会打印,如果要打印,需要通过 --log-level 参数指定。
FATAL_ERROR
- 打印 FATAL_ERROR 级别的日志后,后面的语句都不会执行。
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 # 这一句打印后,cmake会停止执行,后面的语句不会再执行 message(FATAL_ERROR "FATAL_ERROR") message("FATAL_ERROR after") message("===日志打印结束===")
-
- 打印结果,可以看到后面的日志没有再打印,cmake停止执行。
SEND_ERROR
- 打印 SEND_ERROR 级别的日志后,生成可执行程序或者库文件的语句不会执行,其他语句依旧可以执行。
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 # 这一句打印后,其他语句会执行,但生成可执行程序或者生成库的语句不会执行 message(SEND_ERROR "SEND_ERROR") message("SEND_ERROR after") # 这一句不会执行,不会生成可执行程序 add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp) # 这一句日志打印依旧可以执行 message("add_executable after") message("===日志打印结束===")
-
- 打印结果
WARNING
- 打印WARNING级别日志后,不影响cmake执行,也不影响生成可执行程序和库文件。开发者可自行决定是否处理警告信息。
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 message(WARNING "WARNING") message("WARNING after") # 生成可执行程序 add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp) # 这一句日志打印依旧可以执行 message("add_executable after") message("===日志打印结束===")
-
- 打印结果
NOTICE
- 默认的级别就是NOTICE,从NOTICE开始,不会再打印行号。
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 # 这是 WARNING 级别 message(WARNING "WARNING") # 这是NOTICES级别 message(NOTICE "NOTICE") # 生成可执行程序 add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp) # 这个也是NOTICE级别 message("add_executable after") message("===日志打印结束===")
-
- 打印结果
- 可以看到,WARNING 打印了行号,NOTICE 没有打印行号。
STATUS
- STATUS级别开始的日志打印时,会在前面加上 – 符号
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 # 这是 WARNING 级别 message(WARNING "WARNING") # 这是NOTICES级别 message(NOTICE "NOTICE") # 这是STATUS级别 message(STATUS "STATUS") # 生成可执行程序 add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp) # 这个也是NOTICE级别 message("add_executable after") message("===日志打印结束===")
-
- 打印结果
VERBOSE
- 从VERBOSE开始,默认是不打印的
- cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 # 这是 WARNING 级别 message(WARNING "WARNING") # 这是NOTICES级别 message(NOTICE "NOTICE") # 这是STATUS级别 message(STATUS "STATUS") # 这是VERBOSE级别 message(VERBOSE "VERBOSE") # 生成可执行程序 add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp) # 这个也是NOTICE级别 message("add_executable after") message("===日志打印结束===")
-
- 打印结果
- 可以看到 VERBOSE 级别日志并没有打印
- 如果要打印 VERBOSE 级别日志,需要通过 –log-level 参数指定
DEBUG和TRACE
- DEBUG和TRACE级别日志默认也是不打印,如果需要打印,通过 --log-level 参数指定日志级别,这里就不再介绍了。
2.3 将打印结果重定向到文件中
-
可以将cmake日志重定向到文件中
-
cmake示例
-
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.20) # 工程名 project(myproject) # 基础日志打印 message("===日志打印开始===") # 日志级别打印 # 这是 WARNING 级别 message(WARNING "WARNING") # 这是NOTICES级别 message(NOTICE "NOTICE") # 这是STATUS级别 message(STATUS "STATUS") # 这是VERBOSE级别 message(VERBOSE "VERBOSE") # 这是DEBUG级别 message(DEBUG "DEBUG") # 生成可执行程序 add_executable(myproject ${PROJECT_SOURCE_DIR}/main.cpp) # 这个也是NOTICE级别 message("add_executable after") message("===日志打印结束===")
-
-
控制台打印结果
-
文件打印结果
-
默认会将 STATUS 开始的级别重定向到文件中,STATUS 之前的日志级别依旧在控制台打印。
-
如果想将所有日志都打印到文件中,需要将错误输出也重定向到标准输出,如下
-
可以看到,控制台没有打印任何信息,所有信息都打印到了文件中。