函数
add_executable(<name> <options>... <sources>...)
添加一个名为<name>
的可执行目标,该目标将从命令调用中列出的源文件构建。cmake_minimum_required()
设置项目所需的cmake最低版本
cmake_minimum_required(VERSION 3.10)
project()
set()
设置变量
设置正常变量
设置缓存条目
设置环境变量
设置正常变量时,如果给定了PARENT_SCOPE
选项,则变量将在当前作用域之上的作用域中设置。每个新目录或function()
命令都会创建一个新的作用域。也可以使用block()
命令创建作用域。set(PARENT_SCOPE)
将变量的值设置到父目录、调用函数或包含范围(无论哪种情况适用)。变量值的先前状态在当前作用域中保持不变(例如,如果它之前未定义,它仍然是未定义,如果它有值,它仍然是值)。
aux_source_directory()
收集指定目录中所有源文件的名称,并将列表存储在提供的<variable>
中。此命令旨在由使用显式模板实例化的项目使用。模板实例化文件可以存储在Templates
目录中,并使用此命令自动收集,以避免手动列出所有实例化.
使用此命令可以避免为库或可执行目标编写源文件列表。虽然这看起来可行,但CMake无法生成一个知道何时添加了新源文件的构建系统。通常,生成的构建系统知道何时需要重新编译CMake,因为CMakeLists.txt
文件被修改以添加新的源代码。如果只是将源代码添加到目录中而不修改此文件,则必须手动编译CMake以生成包含新文件的构建系统。file()
GLOB:指定目录下搜索所有满足的表达式的文件,将其存储在变量中
GLOB_RECURSE:递归搜索
list()
可用以下命令向所表示的变量中追加文件
其他操作请参考cmake文档if()
else()
elseif()
endif()
<conditon>
请参考cmake(if)文档
message()
message()
是 CMake 中一个用于输出信息到控制台的命令。这在调试和记录构建过程信息时非常有用。你可以使用message()
打印普通消息、警告、错误信息等
message([<mode>] "<message>")
<mode>
包括STATUS
、WARNING
、AUTHOR_WARNING
、SEND_ERROR
、FATAL_ERROR
add_subdirectory()
如果你在多个目录下都有CMakeList.txt
文件,需要在父目录或者根目录
添加该函数,使CMakeList.txt
之间建立联系
目录关系为:
include_directories()
表示头文件的搜索目录
include()
加载并执行另外一个cmake文件。这对于组织项目或在多个项目之间重用通用配置非常有用
add_library()
生成静态库、共享库或对象库
add_library(<name> [STATIC | SHARED | OBJECT] <source1> [<source2> ...])
target_link_libraries()
target_link_libraries(<target> [PUBLIC | INTERFACE | PRIVATE] <libraries>)
target_link_directories()
指定链接器在链接给定目标时应在其中搜索库的路径
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])
以下代码说明:创建submit-p0
对象,将变量${P0_FILES}
所代表的文件,使用zip
命令打包成名为project0-submission.zip
的压缩包,工作目录为变量${CMAKE_CURRENT_SOURCE_DIR}
add_dependencies()
add_dependencies()
是 CMake 中的一个命令,用于指定一个目标(target)依赖于其他目标。当你希望确保某个目标(例如一个可执行文件或库)在构建之前先构建另一个目标(如一个自定义的构建步骤或者另一个库)时,这个命令就非常有用。
add_dependencies(target dep1 dep2 ... depN)
enabletesting()
启用 CMake 的测试功能。
add_test()
add_test()
命令用于定义一个测试,它可以在构建过程中自动运行
find_package()
find_package()
命令用于查找外部库和工具,并配置相应的变量以便在构建过程中使用。find_package()
可以帮助你轻松地集成第三方库到你的项目中,而无需手动设置库的路径和编译选项。
find_package(PackageName [version] [EXACT | VERSION version] [QUIETLY] [REQUIRED] [COMPONENTS components ...])
find_library()
find_library()
命令用于查找一个库文件,并设置一个变量来保存库文件的完整路径。这对于手动查找库文件特别有用,尤其是在库文件不在标准位置时。find_program()
install()
是 CMake 中用于指定如何安装目标、文件和目录的命令。它定义了如何将构建生成的内容复制到安装目录
install(<TYPE> <name> [DESTINATION <dir>] [OPTIONS])
变量
指定构建项目所需的c++标准
CMAKE_CXX_STANDARD
CMAKE_CXX_STANDARD_REQUIRED
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