CMakeLists.txt 文件详解

目录

CMakeLists.txt

常见内容和结构:

文件中的命令和配置:

官方文档:



CMakeLists.txt

CMakeLists.txt 文件是用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。

常见内容和结构:

  1. 项目名称:使用 project() 命令指定项目的名称,例如:

    project(MyProject)

  2. 最低版本要求:使用 cmake_minimum_required() 命令指定 CMake 的最低版本要求,例如:

    cmake_minimum_required(VERSION 3.12)

  3. 设置编译选项:使用 set() 命令来设置编译选项,例如:

    set(CMAKE_CXX_STANDARD 11) set(CMAKE_BUILD_TYPE Debug)

  4. 添加源文件和目标:使用 add_executable()add_library() 命令来添加源文件和生成可执行文件或库,例如:

    add_executable(myapp main.cpp utils.cpp) add_library(mylib mylib.cpp)

  5. 链接其他库:使用 target_link_libraries() 命令来链接其他库到目标,例如:

    target_link_libraries(myapp mylib)

  6. 包含目录和库文件目录:使用 include_directories()link_directories() 命令来指定包含目录和库文件目录,例如:

    include_directories(include) link_directories(lib)

  7. 寻找和链接依赖库:使用 find_package() 命令来寻找和配置依赖库,例如:

    find_package(Boost REQUIRED COMPONENTS system filesystem) target_link_libraries(myapp ${Boost_LIBRARIES})

  8. 条件判断和循环:可以使用条件判断和循环结构来根据不同的条件执行不同的操作,例如:

    if (ENABLE_FEATURE_A) add_definitions(-DFEATURE_A) endif() foreach(source_file ${SOURCE_FILES}) # 处理每个源文件 endforeach()

  9. 其他命令和配置:CMake 提供了许多其他命令和配置选项,可以根据具体需求进行配置,如设置输出路径、定义宏、配置测试等。

编写 CMakeLists.txt 文件时,可以将其组织成多个模块,使用 include() 命令引入其他模块文件,以便更好地组织和管理项目的构建过程。

在命令行中使用 cmake 命令时,指定 CMakeLists.txt 文件的路径,CMake 会读取该文件并根据其中的命令和配置生成相应的构建系统文件(如 Makefile、Visual Studio 解决方案等)。然后,使用生成的构建系统文件进行构建操作。

文件中的命令和配置:

当你编写 CMakeLists.txt 文件时,还可以使用其他命令和配置选项来满足特定的需求。

  1. 添加编译器选项:使用 add_compile_options() 命令来添加特定的编译器选项,例如:

    add_compile_options(-Wall -Wextra)

  2. 设置输出路径:使用 set() 命令来设置可执行文件和库文件的输出路径,例如:

    set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)

  3. 宏定义:使用 add_definitions() 命令来添加宏定义,例如:

    add_definitions(-DDEBUG_MODE)

  4. 配置测试:使用 enable_testing() 命令启用测试,并使用 add_test() 命令来添加测试,例如:

    enable_testing() add_test(NAME mytest COMMAND myapp --test)

  5. 导入和导出库:使用 export()import() 命令来导出和导入库,以便在其他项目中使用,例如:

    export(TARGETS mylib FILE MyLibTargets.cmake) import(MyLibTargets.cmake)

  6. 安装规则:使用 install() 命令来定义安装规则,指定需要安装的文件和目录,例如:

    install(TARGETS myapp DESTINATION bin) install(FILES myheader.h DESTINATION include)

  7. 外部项目依赖管理:使用 ExternalProject 模块或 FetchContent 模块来管理外部项目的依赖,例如:

    include(ExternalProject) ExternalProject_Add(mylibrary SOURCE_DIR ${CMAKE_SOURCE_DIR}/external/mylibrary PREFIX ${CMAKE_BINARY_DIR}/external/mylibrary INSTALL_DIR ${CMAKE_BINARY_DIR}/external/mylibrary )

  8. 自定义模块和函数:你可以编写自定义的 CMake 模块和函数来扩展和定制 CMake 的功能,例如:

    function(my_custom_function ARGUMENT) # 自定义功能的实现 endfunction() include(MyCustomModule.cmake) my_custom_function(VALUE)

这些只是 CMakeLists.txt 文件中的一些常见命令和配置选项,CMake 提供了更多的功能和灵活性,可以根据项目需求进行进一步的配置和定制。

官方文档:

最佳实践是通过阅读 CMake 的官方文档、示例项目和其他资源来深入了解 CMake 的功能和用法。这将帮助你更好地理解如何编写高效和可维护的 CMakeLists.txt 文件,以及如何使用 CMake 构建和管理项目。

下面是cmake的官网教程:CMake Tutorial | CMake

它的文档教程就这这里:cmake(1) — CMake 3.26.4 Documentation

 善用查找文档,才能更好的解决问题和提出问题,对于项目中遇到的情况,才能更加游刃有余。=v=.

猜你喜欢

转载自blog.csdn.net/clayhell/article/details/130927192