https://blog.youkuaiyun.com/2301_79854313/article/details/141197520
函数
add_executable(<name> <options>... <sources>...)
添加一个名为 <name> 的可执行目标,该目标将从命令调用中列出的源文件构建。
cmake_minimum_required()
设置项目所需的cmake最低版本
cmake_minimum_required(VERSION 3.10)
project()
image.png
image.png
set()设置变量
image.png设置正常变量
image.png设置缓存条目
image.png设置环境变量
设置正常变量时,如果给定了 PARENT_SCOPE 选项,则变量将在当前作用域之上的作用域中设置。每个新目录或 function() 命令都会创建一个新的作用域。也可以使用 block() 命令创建作用域。 set(PARENT_SCOPE) 将变量的值设置到父目录、调用函数或包含范围(无论哪种情况适用)。变量值的先前状态在当前作用域中保持不变(例如,如果它之前未定义,它仍然是未定义,如果它有值,它仍然是值)。
image.png
aux_source_directory()
image.png
收集指定目录中所有源文件的名称,并将列表存储在提供的 <variable> 中。此命令旨在由使用显式模板实例化的项目使用。模板实例化文件可以存储在 Templates 目录中,并使用此命令自动收集,以避免手动列出所有实例化.
使用此命令可以避免为库或可执行目标编写源文件列表。虽然这看起来可行,但CMake无法生成一个知道何时添加了新源文件的构建系统。通常,生成的构建系统知道何时需要重新编译CMake,因为 CMakeLists.txt 文件被修改以添加新的源代码。如果只是将源代码添加到目录中而不修改此文件,则必须手动编译CMake以生成包含新文件的构建系统。
file()
GLOB:指定目录下搜索所有满足的表达式的文件,将其存储在变量中
image.png
GLOB_RECURSE:递归搜索
image.png
image.png
list()
可用以下命令向所表示的变量中追加文件
image.png
其他操作请参考cmake文档
if()
else()
elseif()
endif()
image.png
<conditon>请参考cmake(if)文档
image.png
message()
message() 是 CMake 中一个用于输出信息到控制台的命令。这在调试和记录构建过程信息时非常有用。你可以使用 message() 打印普通消息、警告、错误信息等
message([<mode>] "<message>")
<mode>包括STATUS、WARNING、AUTHOR_WARNING 、SEND_ERROR 、FATAL_ERROR
add_subdirectory()
image.png
如果你在多个目录下都有CMakeList.txt文件,需要在父目录或者根目录
添加该函数,使CMakeList.txt之间建立联系
image.png
目录关系为:
image.png
include_directories()
image.png
表示头文件的搜索目录
image.png
include()
加载并执行另外一个cmake文件。这对于组织项目或在多个项目之间重用通用配置非常有用
image.png
add_library()
生成静态库、共享库或对象库
add_library(<name> [STATIC | SHARED | OBJECT] <source1> [<source2> ...])
image.png
target_link_libraries()
target_link_libraries(<target> [PUBLIC | INTERFACE | PRIVATE] <libraries>)
image.png
image.png
target_link_directories()
指定链接器在链接给定目标时应在其中搜索库的路径
image.png
add_custom_target()
add_custom_target() 是 CMake 中的一个命令,用于定义一个自定义的目标(target),这个目标通常用于执行一些非编译相关的任务,比如清理临时文件、生成文档、运行测试脚本等。
add_custom_target(name [COMMAND command [ARGS args...]]
2 [DEPENDS dependencies...]
3 [WORKING_DIRECTORY directory]
4 [COMMENT comment]
5 [VERBATIM | APPEND]
6 [BYPRODUCTS byproducts...]
7 [COMMAND_EXPAND_LISTS])
1
2
3
4
5
6
7
image.png
以下代码说明:创建submit-p0对象,将变量${P0_FILES}所代表的文件,使用zip命令打包成名为project0-submission.zip的压缩包,工作目录为变量${CMAKE_CURRENT_SOURCE_DIR}
image.png
add_dependencies()
add_dependencies() 是 CMake 中的一个命令,用于指定一个目标(target)依赖于其他目标。当你希望确保某个目标(例如一个可执行文件或库)在构建之前先构建另一个目标(如一个自定义的构建步骤或者另一个库)时,这个命令就非常有用。
add_dependencies(target dep1 dep2 ... depN)
enabletesting()
启用 CMake 的测试功能。
image.png
add_test()
add_test() 命令用于定义一个测试,它可以在构建过程中自动运行
image.png
find_package()
find_package() 命令用于查找外部库和工具,并配置相应的变量以便在构建过程中使用。find_package() 可以帮助你轻松地集成第三方库到你的项目中,而无需手动设置库的路径和编译选项。
find_package(PackageName [version] [EXACT | VERSION version] [QUIETLY] [REQUIRED] [COMPONENTS components ...])
image.png
find_library()
find_library() 命令用于查找一个库文件,并设置一个变量来保存库文件的完整路径。这对于手动查找库文件特别有用,尤其是在库文件不在标准位置时。
find_program()
image.png
install() 是 CMake 中用于指定如何安装目标、文件和目录的命令。它定义了如何将构建生成的内容复制到安装目录
install(<TYPE> <name> [DESTINATION <dir>] [OPTIONS])
image.png
变量
指定构建项目所需的c++标准
CMAKE_CXX_STANDARD
CMAKE_CXX_STANDARD_REQUIRED
image.png
CMAKE_SOURCE_DIR: 项目的根源代码目录。
CMAKE_BINARY_DIR: 项目的根构建目录。
CMAKE_CURRENT_SOURCE_DIR: 当前处理的 CMakeLists.txt 文件的源代码目录。
CMAKE_CURRENT_BINARY_DIR: 当前处理的 CMakeLists.txt 文件的构建目录。
CMAKE_INSTALL_PREFIX: 默认的安装目录(通常是 /usr/local)。
CMAKE_BUILD_TYPE: 构建类型,如 Debug、Release、RelWithDebInfo、MinSizeRel。
CMAKE_CXX_COMPILER: C++ 编译器的路径。
CMAKE_C_COMPILER: C 编译器的路径。
CMAKE_PREFIX_PATH: 搜索额外的 CMake 模块和包的路径。
CMAKE_MODULE_PATH: 自定义 CMake 模块的路径。
CMAKE_EXPORT_COMPILE_COMMANDS: 是否生成 compile_commands.json 文件,用于代码分析工具。
CMAKE_VERBOSE_MAKEFILE: 设置为 ON 时,会显示详细的构建命令。
参考
cmake文档https://cmake.org/cmake/help/latest/
爱编程的大丙https://subingwen.cn/cmake/CMake-primer/
通义
chatgpt
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/2301_79854313/article/details/141197520