CMake 常用指令、命令和函数的大全表格

CMake 常用指令、命令和函数的大全表格,包含基础语法、示例及使用场景:


例子:

cmake_minimum_required(VERSION 3.10)
project(Homework)

# 设置 C 标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)

# 定义源文件目录
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/homework/0625/双向链表")

# 定义源文件列表
set(SOURCES
    "${SOURCE_DIR}/main.c"
    "${SOURCE_DIR}/list.c"
)

# 添加可执行文件
add_executable(main ${SOURCES})

# 添加包含目录
target_include_directories(main PRIVATE
    "${SOURCE_DIR}"
)

# 如果需要链接其他库,可以在这里添加
# 例如:
# target_link_libraries(main PRIVATE pthread)

基础项目配置

命令/函数说明参数示例使用场景/示例
cmake_minimum_required(VERSION <min> [<max>])指定 CMake 最低版本VERSION 3.10每个 CMakeLists.txt 开头必须:
cmake_minimum_required(VERSION 3.10)
project(<PROJECT_NAME> [LANGUAGES] [VERSION])定义项目名称、语言和版本project(MyApp VERSION 1.0 LANGUAGES CXX)初始化项目,设置 C++ 语言:
project(MyApp LANGUAGES CXX)
add_executable(<target> [sources...])生成可执行文件add_executable(app main.cpp utils.cpp)编译 main.cpputils.cpp 生成 app
add_library(<target> [STATIC/SHARED] [sources...])生成库文件(静态库或动态库)add_library(mylib STATIC lib.cpp)生成名为 mylib 的静态库
target_link_libraries(<target> [PRIVATE/PUBLIC/INTERFACE] <libs...>)链接库到目标target_link_libraries(app PRIVATE mylib Threads::Threads)mylib 和线程库链接到 app

变量与作用域

命令/函数说明参数示例使用场景/示例
set(<variable> <value> [CACHE TYPE <docstring>])设置变量set(SOURCES src/main.cpp src/utils.cpp)定义源文件列表变量 SOURCES
unset(<variable>)删除变量unset(SOURCES)清除变量 SOURCES
list(APPEND/REMOVE/...)操作列表变量list(APPEND SOURCES src/extra.cpp)SOURCES 添加新文件
option(<option_name> "<help_text>" [default_value])定义配置选项option(ENABLE_TEST "Enable tests" ON)用户可通过 -DENABLE_TEST=OFF 关闭测试

文件与目录管理

命令/函数说明参数示例使用场景/示例
include_directories([AFTER/BEFORE] [dirs...])添加头文件搜索路径(全局)include_directories(include/)已弃用,推荐使用 target_include_directories
target_include_directories(<target> [INTERFACE/PUBLIC/PRIVATE] [dirs...])为目标添加头文件路径target_include_directories(mylib PUBLIC include/)现代 CMake 推荐方式,指定库的头文件路径
add_subdirectory(<dir>)添加子目录并处理其 CMakeLists.txtadd_subdirectory(src)递归构建子项目
file(GLOB <variable> [<patterns>...])匹配文件到变量file(GLOB SOURCES "src/*.cpp")收集所有 .cpp 文件到 SOURCES(慎用,需手动维护)

条件与流程控制

命令/函数说明参数示例使用场景/示例
if()/elseif()/else()/endif()条件判断if(UNIX AND NOT APPLE)平台特定逻辑:
if(WIN32)
add_definitions(-DWINDOWS)
endif()
foreach(<var> IN [ITEMS/LISTS])...endforeach()循环遍历列表foreach(file IN LISTS SOURCES)
message("File: ${file}")
endforeach()
遍历源文件列表并打印
while()...endwhile()循环直到条件不满足set(i 0)
while(i LESS 5)
math(EXPR i "${i} + 1")
endwhile()
循环计数(较少使用)

查找与依赖管理

命令/函数说明参数示例使用场景/示例
find_package(<PackageName> [version] [REQUIRED])查找外部依赖包find_package(OpenCV 4.0 REQUIRED)查找 OpenCV 并链接:
target_link_libraries(app PRIVATE OpenCV::OpenCV)
find_library(<VAR> <name> [PATHS...])查找库文件路径find_library(MATH_LIB m)查找数学库 libm.so(Linux)
find_path(<VAR> <name> [PATHS...])查找头文件路径find_path(JSON_INCLUDE json/json.h)查找 JSON 头文件路径

安装与打包

命令/函数说明参数示例使用场景/示例
install(TARGETS <targets...> DESTINATION <dir>)安装构建目标install(TARGETS app DESTINATION bin)将可执行文件安装到 bin 目录
install(FILES <files...> DESTINATION <dir>)安装文件install(FILES config.ini DESTINATION etc)安装配置文件到 etc
install(DIRECTORY <dir> DESTINATION <dir>)安装目录install(DIRECTORY include/ DESTINATION include)安装头文件目录

其他常用命令

命令/函数说明参数示例使用场景/示例
message([STATUS/WARNING/FATAL_ERROR] "message")输出信息message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")调试或状态提示
add_custom_command(...)添加自定义构建规则add_custom_command(OUTPUT preprocessed.cpp COMMAND gcc -E main.cpp > preprocessed.cpp)生成预处理文件
add_custom_target(<name> [COMMAND ...])定义自定义目标(如伪目标)add_custom_target(run ALL COMMAND ./app)构建后自动运行程序

示例场景

1. 基础项目
cmake_minimum_required(VERSION 3.10)
project(MyApp LANGUAGES CXX)

add_executable(app main.cpp)
target_include_directories(app PRIVATE include/)
target_link_libraries(app PRIVATE Threads::Threads)
2. 使用外部库(如 OpenCV)
find_package(OpenCV REQUIRED)
add_executable(demo demo.cpp)
target_link_libraries(demo PRIVATE OpenCV::core OpenCV::highgui)
3. 条件编译
option(USE_CUDA "Enable CUDA support" OFF)
if(USE_CUDA)
  find_package(CUDA REQUIRED)
  add_library(gpu_lib STATIC gpu_kernel.cu)
endif()

注意

  • 现代 CMake 推荐使用 目标级别命令(如 target_include_directories 而非 include_directories)。
  • 作用域关键词 PRIVATEPUBLICINTERFACE 用于控制依赖传递性。
  • 更多命令请参考 CMake 官方文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值