最终示例运行结果
CMakeLists.txt中的注释
单行注释:
单行注释在注释文字前加’#'号即可,例如:
#我是单行注释
多行注释(CMake3.0之前版本不支持此种多行注释(括号注释)):
多行注释使用"#[[…]]"将内容包括起来即可,例如:
#[[
我是多行注释
我也叫括号注释
]]
CMakeLists.txt中的 Message
message 用于打印、输出信息,类似于 Linux 的 echo 命令。
message([< mode >] “message text” …) # 信息内容以空格分开
–log-level=<ERROR|WARNING|NOTICE|STATUS|VERBOSE|DEBUG|TRACE>
# 示例1,输出为"helloworld"
message("hello" #[[我是括号注释]] "world")
# 示例2
message(WARNING "hello" #[[我是括号注释]] "world")
CMakeLists.txt中的变量
变量使用关键字set,将⼀个CMAKE 变量设置为给定值。set(< variable > ) 将变量< variable >的值设置为< value >,如果没有指定< value >那么这个变量就会被撤销⽽不是被设置。
set(var1 "变量测试")
set(var2 9527)
message(WARNING "hello" #[[我是括号注释]] "\${var1}:" ${var1} " var2:${var2}")
变量名 | 变量用途 | 描述 |
---|---|---|
PROJECT_NAME | 提供信息的变量 | project()设置的项目名称 |
BUILD_SHARED_LIBS | 改变⾏为的变量 add_library() | ON : 创建共享库 OFF : 创建静态库 |
… | … | … |
示例:对工程名使用CMake提供信息的变量-“PROJECT_NAME ”
#[[
将LogLib工程编译输出动态链接库,
TestLog工程输出为exe。它将调用LogLib输出的库
]]
# 最低版本支持
cmake_minimum_required(VERSION 3.16)
# 工程名称
set(PROJECT_NAME "AAA")
project(${PROJECT_NAME})
# 工程包含库的头文件路径
include_directories("./LogLib")
# 构建编译输出的库(库名称 动态库(静态库填STATIC) 库工程下文件名,.h可不用写)
add_library(LogLib SHARED ./LogLib/XLog.cpp)
# 构建执行程序(项目名称 工程下文件名,.h可不用写)
add_executable(${PROJECT_NAME} TestLog/main.cpp)
# 工程需要连接的库名
target_link_libraries(${PROJECT_NAME} LogLib)
CMakeLists.txt中引用其他.cmake文件](https://i-blog.csdnimg.cn/direct/d26ff17546134b308af76aaf579e8661.png)
从给定的⽂件中读取CMake 的列表⽂件。include(file [OPTIONAL] [RESULT_VARIABLEVAR ] ) 从给定的⽂件中读取CMake 的清单⽂件代码。在清单⽂件中的命令会被⽴即处理。如果指定了OPTIONAL 选项,那么如果被包含⽂件不存在的话,不会报
错。如果指定了RESULT_VARIABLE 选项,那么var 或者会被设置为被包含⽂件的完
整路径,或者是NOTFOUND,表示没有找到该⽂件。
include("xxx.cmake") // 文件不存在报错
include("xxx.cmake" OPTIONAL) // 文件不存在不报错
综合示例 - 编译多文件源码
源码文件结构如下
CMakeLists.txt
# cmake最低版本要求
cmake_minimum_required(VERSION 3.28)
# 项目名称
project("auto_src_cmake")
# 头文件路径
include_directories("./include")
# 源文件路径
aux_source_directory("./" src1)
aux_source_directory("./src" src2)
# 设置项目输出程序配置(目录自动查找文件)
add_executable(${PROJECT_NAME} ${src1} ${src2})
编译运行
关注
笔者 - jxd