cmake---常用的cmake函数的简单介绍

函数

  1. add_executable(<name> <options>... <sources>...)
    添加一个名为 <name> 的可执行目标,该目标将从命令调用中列出的源文件构建。
  2. cmake_minimum_required()
    设置项目所需的cmake最低版本
    cmake_minimum_required(VERSION 3.10)
  3. project()
    image.png
    image.png
  4. set()设置变量
    image.png设置正常变量
    image.png设置缓存条目
    image.png设置环境变量
    设置正常变量时,如果给定了 PARENT_SCOPE 选项,则变量将在当前作用域之上的作用域中设置。每个新目录或 function() 命令都会创建一个新的作用域。也可以使用 block() 命令创建作用域。 set(PARENT_SCOPE) 将变量的值设置到父目录、调用函数或包含范围(无论哪种情况适用)。变量值的先前状态在当前作用域中保持不变(例如,如果它之前未定义,它仍然是未定义,如果它有值,它仍然是值)。
    image.png
  5. aux_source_directory()
    image.png
    收集指定目录中所有源文件的名称,并将列表存储在提供的 <variable> 中。此命令旨在由使用显式模板实例化的项目使用。模板实例化文件可以存储在 Templates 目录中,并使用此命令自动收集,以避免手动列出所有实例化.
    使用此命令可以避免为库或可执行目标编写源文件列表。虽然这看起来可行,但CMake无法生成一个知道何时添加了新源文件的构建系统。通常,生成的构建系统知道何时需要重新编译CMake,因为 CMakeLists.txt 文件被修改以添加新的源代码。如果只是将源代码添加到目录中而不修改此文件,则必须手动编译CMake以生成包含新文件的构建系统。
  6. file()
    GLOB:指定目录下搜索所有满足的表达式的文件,将其存储在变量中
    image.png
    GLOB_RECURSE:递归搜索
    image.png
    image.png
  7. list()
    可用以下命令向所表示的变量中追加文件
    image.png
    其他操作请参考cmake文档
  8. if()
    else()
    elseif()
    endif()
    image.png
    <conditon>请参考cmake(if)文档
    image.png
  9. message()
    message() 是 CMake 中一个用于输出信息到控制台的命令。这在调试和记录构建过程信息时非常有用。你可以使用 message() 打印普通消息、警告、错误信息等
    message([<mode>] "<message>")
    <mode>包括STATUSWARNINGAUTHOR_WARNING SEND_ERROR FATAL_ERROR
  10. add_subdirectory()
    image.png
    如果你在多个目录下都有CMakeList.txt文件,需要在父目录或者根目录
    添加该函数,使CMakeList.txt之间建立联系
    image.png
    目录关系为:
    image.png
  11. include_directories()
    image.png
    表示头文件的搜索目录
    image.png
  12. include()
    加载并执行另外一个cmake文件。这对于组织项目或在多个项目之间重用通用配置非常有用
    image.png
  13. add_library()
    生成静态库、共享库或对象库
    add_library(<name> [STATIC | SHARED | OBJECT] <source1> [<source2> ...])
    image.png
  14. target_link_libraries()
    target_link_libraries(<target> [PUBLIC | INTERFACE | PRIVATE] <libraries>)
    image.png
    image.png
  15. target_link_directories()
    指定链接器在链接给定目标时应在其中搜索库的路径
    image.png
  16. 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])

image.png
以下代码说明:创建submit-p0对象,将变量${P0_FILES}所代表的文件,使用zip命令打包成名为project0-submission.zip的压缩包,工作目录为变量${CMAKE_CURRENT_SOURCE_DIR}
image.png

  1. add_dependencies()
    add_dependencies() 是 CMake 中的一个命令,用于指定一个目标(target)依赖于其他目标。当你希望确保某个目标(例如一个可执行文件或库)在构建之前先构建另一个目标(如一个自定义的构建步骤或者另一个库)时,这个命令就非常有用。
    add_dependencies(target dep1 dep2 ... depN)
  2. enabletesting()
    启用 CMake 的测试功能。
    image.png
  3. add_test()
    add_test() 命令用于定义一个测试,它可以在构建过程中自动运行
    image.png
  4. find_package()
    find_package() 命令用于查找外部库和工具,并配置相应的变量以便在构建过程中使用。find_package() 可以帮助你轻松地集成第三方库到你的项目中,而无需手动设置库的路径和编译选项。
    find_package(PackageName [version] [EXACT | VERSION version] [QUIETLY] [REQUIRED] [COMPONENTS components ...])
    image.png
  5. find_library()
    find_library() 命令用于查找一个库文件,并设置一个变量来保存库文件的完整路径。这对于手动查找库文件特别有用,尤其是在库文件不在标准位置时。
  6. find_program()
    image.png
  7. install() 是 CMake 中用于指定如何安装目标、文件和目录的命令。它定义了如何将构建生成的内容复制到安装目录
    install(<TYPE> <name> [DESTINATION <dir>] [OPTIONS])
    image.png

变量

指定构建项目所需的c++标准

  1. CMAKE_CXX_STANDARD
  2. 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: 构建类型,如 DebugReleaseRelWithDebInfoMinSizeRel
  • 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 时,会显示详细的构建命令。

参考

  1. cmake文档https://cmake.org/cmake/help/latest/
  2. 爱编程的大丙https://subingwen.cn/cmake/CMake-primer/
  3. 通义
  4. chatgpt
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cmake-practice.pdf 是一本关于CMake实践的文档。其中包含了关于使用CMake构建和管理项目的实际实践经验。 该文档从基础开始介绍CMake的概念和原理,包括如何编写CMakeLists.txt文件来定义项目的目录结构、编译选项、依赖库等。它还涵盖了CMake常用的命令和函数,以及如何使用变量和宏来自定义构建过程。 文档中提供了一些常见的CMake用法示例,例如如何构建一个简单C++项目、如何处理多个源文件、如何生成静态和动态链接库等。此外,还介绍了一些高级主题,如支持多个平台和编译器、使用第三方库、配置选项和生成器的选择等。 除了介绍基本用法外,该文档还包含了一些实际的项目案例,例如如何构建一个跨平台的图形界面应用程序、如何使用CMake进行单元测试和集成测试等。这些案例可以帮助读者更好地理解和应用CMake。 总而言之,cmake-practice.pdf 是一本实践性强的CMake文档,适合想要学习和应用CMake的开发人员阅读和参考。通过学习该文档,读者可以了解到CMake的基本概念和用法,掌握使用CMake构建和管理项目的技巧,提高项目的可维护性和跨平台性。 ### 回答2: cmake-practice.pdf 是一份关于 CMake 实践的 PDF 文档。CMake 是一个跨平台的自动构建工具,可以帮助开发者更方便地进行项目的构建和管理。这份文档主要介绍了如何使用 CMake 来构建项目,并提供了一些实际的使用案例。 文档首先简要介绍CMake 的基本概念和优势,包括 CMakeLists.txt 文件的组成结构和常用命令的使用方法。接着,文档详细讲解了如何使用 CMake 来构建不同类型的项目,包括 C/C++ 项目、静态库和动态库项目,以及如何添加和管理依赖库。 文档还提供了一些常见的 CMake 实践技巧和经验,例如如何处理不同操作系统的差异、如何处理不同编译器的差异,以及如何管理编译选项和链接选项等。此外,文档还介绍了一些 CMake 的高级用法,例如如何自定义构建流程、如何添加单元测试和代码覆盖率检测等。 总之,cmake-practice.pdf 是一份非常实用的 CMake 实践指南,对于希望更深入了解和应用 CMake 的开发者来说,具有很高的参考价值。通过阅读这份文档,开发者可以更快地上手使用 CMake,并掌握一些高级的用法和技巧,从而更高效地进行项目构建和管理。 ### 回答3: cmake-practice.pdf是一个关于CMake的练习指南的PDF文件。 CMake是一个跨平台的开源构建工具,它可以自动生成与平台相关的构建脚本,使软件的构建过程更加简单和可移植。cmake-practice.pdf是一个针对CMake使用者的练习指南,旨在帮助用户学习和掌握CMake的基本用法和高级特性。 在cmake-practice.pdf中,你将会找到一系列的练习题,涵盖了CMake的各个方面,包括项目的组织结构、源代码的编译、生成可执行文件、链接库文件等等。对于每一个练习题,都会提供详细的步骤和解答,以便帮助你理解和掌握每个练习的目标和过程。 通过完成cmake-practice.pdf中的练习,你将获得以下技能和知识: 1. 理解CMake的基本工作原理和语法。 2. 学会如何使用CMake来组织和管理大型项目。 3. 掌握编译源代码、生成可执行文件的方法。 4. 学会如何链接外部库文件和依赖项。 5. 熟悉CMake的高级特性,如条件编译、自定义命令、配置文件等等。 cmake-practice.pdf是一个很好的学习资源,可以帮助你快速入门和提高CMake的使用能力。无论你是初学者还是有一定经验的开发者,都可以从中获得实际的帮助和指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值