语法
#声明所需要的cmake版本
cmake_minimum_required(VERSION 3.28)
# 设置项目名称
project(test)
#设置生成目标 生成可执行文件 指定源文件依赖...
add_executable(test main.cc)
#设置变量target内容 variable content1 content2
set(target "main")
#添加列表变量
set(src_files "")
list(APPEND src_files main.cc child.cc)
#预定义变量定义工作目录,CMakeLists.txt所在目录
CMAKE_CURRENT_SOURCE_DIR
#预定义变量定义输出目录,执行cmake命令的目录
CMAKE_CURRENT_BINARY_DIR
#预定义变量定义默认安装目录 make install 默认安装路径
CMAKE_INSTALL_PREFIX
#字符串操作
#string(REPLACE "old" "new" str "old old old")
#将src_files中的.cc替换为.o放到obj_files中
set(obj_files "")
string(REPLACE ".cc" ".o" obj_files ${src_files})
#添加头文件路径,不想写前缀路径,可以添加头文件路径,相对路径,不用../,根据工作路径,执行路径进行相对
include_directories(path)
#添加生成目标
#add_executable(test ${obj_files})
#添加动态链接库 可执行程序名 库名 库路径
target_link_libraries(test lib1 lib2)
#错误提示,如检查库是否存在 STATUS 普通信息 WARNING 警告信息 FATAL_ERROR 致命错误
message(STATUS "This is a test message")
message(WARNING "This is a test message")
message(FATAL_ERROR "致命错误-导致程序退出")
#源码文件 .cc .cpp .c 等
set(src_files "")
# 将src_dir目录下的所有源码文件名称取出来,放到src_files中
aux_source_directory(src_dir src_files)
#判断文件是否存在
if(NOT EXISTS "file.txt")
message(FATAL_ERROR "文件不存在")
endif()
#循环遍历
foreach(file ${src_files})
message(STATUS "file: ${file}")
endforeach()
#执行外部指令
add_custom_command(
PRE_BUILD #表示在构建之前执行
COMMAND #要执行的命令
ARGS #要执行的命令的参数
DEPENDS #依赖的文件
OUTPUT #指定要生成的目标名称
COMMENT #执行命令要打印的内容
)
#添加嵌套cmake目录
add_subdirectory(subdir)
#设置安装路径 make install 安装路径 可执行程序的安装路径,target可执行程序名,DESTINATION 可执行程序目标,创建bin目录,将可执行程序安装到bin目录下
install(TARGETS ${target} RUNTIME DESTINATION bin)
实践: