CMake使用
构建目标和属性#
project#
project(<项目名称> [<编程语言>...])
project(<项目名称>
[VERSION <主版本号>[.<次版本号>[.<补丁版本号>[.<修订版本号>]]]]
[DESCRIPTION <项目描述>]
[HOMEPAGE_URL] <项目主页URL>
[LANGUAGES <编程语言>...])
当无须声明各种属性时,第一种形式最简便,编程语言参数支持C、CXX、CUDA、OBJC、OBJCXX、Fortran、HIP、ISPC和ASM。
add_executable#
add_executable(<目标名称> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [<源文件>...])
该命令创建一个可执行文件类型的构建目标,其中第一个参数是必选参数,目标名称并不一定是最终的可执行文件的名称,因可通过OUTPUT_NAME目标属性来修改。源文件可暂时省略,可通过target_source命令设置源程序。
add_library#
add_library(<目标名称> <库类型> [EXCLUDE_FROM_ALL] [<源文件>...])
该命令会创建一个静态库|动态库|模块库类型的构建目标,<库类型>对应取值STATIC|SHARED|MODULE。
add_library(<目标名称> OBJECT [<源文件>...])
该命令会创建一个目标文件库的构建目标,该命令仅编译其包含的源文件,生成一系列的目标文件,并不会将这些目标文件打包或链接到某个库文件中。
include_directories#
include_directories([AFTER|BEFORE] [SYSTEM] <目录>...)
该命令仅对当前目录及其子目录中的构建目标生效,用于将<目录>设置为构建目标的头文件搜索目录
target_include_directories#
target_include_directories(<构建目标>
[SYSTEM] [AFTER|BEFORE] <PRIVATE|INTERFACE|PUBLIC> <目录> ...
[<PRIVATE|INTERFACE|PUBLIC> <目录>...]...)
该命令用于将<目录>加入到<构建目标>的头文件搜索目录列表中
target_link_directories#
target_link_directories(<构建目标> [BEFORE]
<PRIVATE|INTERFACE|PUBLIC> <目录>...
[<PRIVATE|INTERFACE|PUBLIC> <目录>...]...)
该命令用于将<目录>设置为<构建目标>的链接库搜索目录
target_sources#
target_sources(<构建目标>
<PRIVATE|INTERFACE|PUBLIC> <源文件>...
[<PRIVATE|INTERFACE|PUBLIC> <源文件>...]...)
该命令用于设置构建目标所需的源文件
指定源文件方式#
aux_source_directory#
aux_source_directory(<目录> <结果变量>)
该命令用于遍历指定目录中的源文件,并将它们的路径存入结果变量中。若增添源文件,使用该命令不会引起CMakeLists.txt改变,可能不会重新构建。
add_subdirectory#
add_subdirectory(<源文件目录> [<二进制目录>] [EXECLUDE_FROM_ALL])
该命令用于将源文件目录这个子目录加入项目,该子目录中必须含有一个CMake目录程序,当CMake执行该命令时,会立即进入子目录执行这个目录程序,当前目录程序的执行会暂停。
message#
显示信息
message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message内容")
option#
用于定义布尔型选项,可以在构建项目时启用或禁用特定的功能
# option_variable:选项变量的名称
# description:选项的描述
# initial_value:选项的初始值,通常是ON或OFF
option(<option_variable> "description" <initial_value>)
以是否启用日志功能为例:
option(ENABLE_LOGGING "Enable logging functionality" ON)
在CMakeLists.txt中可以通过if语句来使用这个选项:
if(ENABLE_LOGGING)
# 这个函数会定义一个宏,在代码中可以判断该宏
add_definitions(-DENABLE_LOGGING)
endif()
在使用CMake命令构建项目时可在命令行来启用或禁用option
cmake -DENABLE_LOGGING=OFF ..
CMake常用模块#
find_package#
用来寻找引用的外部库,包括头文件路径、链接库路径等。但是想要通过该命令寻找到库,需要库作者能提供XXXConfig.cmake
和FindXXX.cmake
配置文件。
# 以寻找googletest库为例
# REQUIRED参数表名如果没找到就不会向下执行
find_package(GTest REQUIRED)
include_directories(${GTest_INCLUDE_DIRS})
target_link_libraries(exec_name ${GTest_LIBS})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY