CMakeLists常用关键字及其主要功能总结

发布于:2025-02-10 ⋅ 阅读:(56) ⋅ 点赞:(0)

以下是 CMakeLists 中一些常用关键字及其主要功能的总结:

1. cmake_minimum_required

  • 功能

    • 用于指定 CMake 所需的最低版本,确保项目使用的 CMake 功能可以正常工作。
  • 示例

cmake_minimum_required(VERSION 3.10)
  • 解释
    • 该语句表示此 CMakeLists 文件要求 CMake 的最低版本为 3.10。

2. project

  • 功能

    • 用于设置项目名称,并可同时设置项目版本、描述等信息。
  • 示例

project(MyProject VERSION 1.0 DESCRIPTION "A simple C++ project")
  • 解释
    • 定义了一个名为 MyProject 的项目,版本为 1.0,描述为 “A simple C++ project”。

3. set

  • 功能

    • 可设置变量的值,用于存储信息,如源文件列表、编译器选项等。
  • 示例

set(SOURCE_FILES main.cpp helper.cpp)
  • 解释
    • main.cpphelper.cpp 存储在 SOURCE_FILES 变量中,后续可使用 ${SOURCE_FILES} 引用该变量。

4. add_executable

  • 功能

    • 从源文件创建可执行文件。
  • 示例

add_executable(MyExecutable ${SOURCE_FILES})
  • 解释
    • SOURCE_FILES 变量中存储的源文件创建一个名为 MyExecutable 的可执行文件。

5. add_library

  • 功能

    • 从源文件创建库文件,可以是静态库(.a.lib)或共享库(.so.dll)。
  • 示例

add_library(MyLibrary STATIC library.cpp)
  • 解释
    • library.cpp 创建一个名为 MyLibrary 的静态库。

6. target_include_directories

  • 功能

    • 为目标(可执行文件或库)添加包含目录,使编译器可以找到头文件。
  • 示例

target_include_directories(MyExecutable PRIVATE include)
  • 解释
    • MyExecutable 可执行文件添加 include 目录作为头文件的搜索路径,PRIVATE 表示该包含目录仅用于该目标的编译,不传递给依赖该目标的其他目标。

7. target_link_libraries

  • 功能

    • 将库链接到目标,使得目标可以使用库中的函数和符号。
  • 示例

target_link_libraries(MyExecutable PRIVATE MyLibrary)
  • 解释
    • MyLibrary 库链接到 MyExecutable 可执行文件,PRIVATE 表示仅当前目标需要此链接,不会传递给依赖此目标的其他目标。

8. include_directories

  • 功能

    • 为整个项目添加包含目录,适用于多个目标。
  • 示例

include_directories(include)
  • 解释
    • 为整个项目添加 include 目录作为头文件搜索路径,该目录可被所有目标使用。

9. link_directories

  • 功能

    • 为整个项目添加库文件的搜索目录,用于查找库文件。
  • 示例

link_directories(lib)
  • 解释
    • 为整个项目添加 lib 目录作为库文件的搜索目录,在链接时会在该目录查找所需的库文件。

10. find_package

  • 功能

    • 用于查找外部库的配置文件,使项目可以使用第三方库。
  • 示例

find_package(Boost REQUIRED)
  • 解释
    • 尝试查找 Boost 库,如果找不到,CMake 会报错,因为使用了 REQUIRED 关键字。

11. add_subdirectory

  • 功能

    • 用于添加子目录,CMake 会在子目录中寻找并处理 CMakeLists 文件。
  • 示例

add_subdirectory(subdirectory)
  • 解释
    • 进入 subdirectory 子目录,并处理其中的 CMakeLists 文件。

12. option

  • 功能

    • 用于定义一个选项,用户可以在配置时选择开启或关闭。
  • 示例

option(USE_FEATURE "Use a certain feature" ON)
  • 解释
    • 定义了一个名为 USE_FEATURE 的选项,描述为 “Use a certain feature”,默认开启(ON)。

13. configure_file

  • 功能

    • 将输入文件复制到输出文件,并可以进行变量替换,常用于配置文件的生成。
  • 示例

configure_file(config.in config.h)
  • 解释
    • config.in 文件复制到 config.h 文件,同时可以根据 CMake 中的变量对 config.in 中的占位符进行替换。

14. install

  • 功能

    • 用于指定安装规则,包括可执行文件、库文件、头文件等的安装位置。
  • 示例

install(TARGETS MyExecutable DESTINATION bin)
  • 解释
    • MyExecutable 可执行文件安装到 bin 目录。

总结

  • 项目设置和版本cmake_minimum_required, project
  • 变量设置和使用set
  • 构建目标add_executable, add_library
  • 头文件和库文件处理target_include_directories, target_link_libraries, include_directories, link_directories, find_package
  • 子目录和选项处理add_subdirectory, option
  • 文件操作和安装规则configure_file, install

这些关键字是 CMakeLists 中最常用的部分,合理使用它们可以帮助你有效地管理 C++ 项目的构建、依赖和安装等过程。在使用 CMake 时,还可以根据不同的项目需求使用其他的 CMake 命令和关键字,通过 CMake 的文档可以进一步学习和探索。

以下是一个简单的 CMakeLists 示例,将上述部分关键字结合使用:

cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0)


set(SOURCE_FILES main.cpp helper.cpp)


add_executable(MyExecutable ${SOURCE_FILES})


target_include_directories(MyExecutable PRIVATE include)


add_library(MyLibrary STATIC library.cpp)


target_link_libraries(MyExecutable PRIVATE MyLibrary)


install(TARGETS MyExecutable MyLibrary DESTINATION bin)

此示例展示了如何使用 CMake 构建一个简单的 C++ 项目,包括创建可执行文件、静态库,添加头文件目录,链接库文件以及指定安装位置。

CMake 是一个强大的构建工具,这些关键字是构建过程的基本组成部分,合理使用它们可以使项目的构建更加灵活和易于管理。


网站公告

今日签到

点亮在社区的每一天
去签到