目录
CMakeLists.txt
常见内容和结构:
文件中的命令和配置:
官方文档:
CMakeLists.txt
CMakeLists.txt 文件是用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。
常见内容和结构:
-
项目名称:使用
project()
命令指定项目的名称,例如:project(MyProject)
-
最低版本要求:使用
cmake_minimum_required()
命令指定 CMake 的最低版本要求,例如:cmake_minimum_required(VERSION 3.12)
-
设置编译选项:使用
set()
命令来设置编译选项,例如:set(CMAKE_CXX_STANDARD 11) set(CMAKE_BUILD_TYPE Debug)
-
添加源文件和目标:使用
add_executable()
或add_library()
命令来添加源文件和生成可执行文件或库,例如:add_executable(myapp main.cpp utils.cpp) add_library(mylib mylib.cpp)
-
链接其他库:使用
target_link_libraries()
命令来链接其他库到目标,例如:target_link_libraries(myapp mylib)
-
包含目录和库文件目录:使用
include_directories()
和link_directories()
命令来指定包含目录和库文件目录,例如:include_directories(include) link_directories(lib)
-
寻找和链接依赖库:使用
find_package()
命令来寻找和配置依赖库,例如:find_package(Boost REQUIRED COMPONENTS system filesystem) target_link_libraries(myapp ${Boost_LIBRARIES})
-
条件判断和循环:可以使用条件判断和循环结构来根据不同的条件执行不同的操作,例如:
if (ENABLE_FEATURE_A) add_definitions(-DFEATURE_A) endif() foreach(source_file ${SOURCE_FILES}) # 处理每个源文件 endforeach()
-
其他命令和配置:CMake 提供了许多其他命令和配置选项,可以根据具体需求进行配置,如设置输出路径、定义宏、配置测试等。
编写 CMakeLists.txt 文件时,可以将其组织成多个模块,使用 include()
命令引入其他模块文件,以便更好地组织和管理项目的构建过程。
在命令行中使用 cmake
命令时,指定 CMakeLists.txt 文件的路径,CMake 会读取该文件并根据其中的命令和配置生成相应的构建系统文件(如 Makefile、Visual Studio 解决方案等)。然后,使用生成的构建系统文件进行构建操作。
文件中的命令和配置:
当你编写 CMakeLists.txt 文件时,还可以使用其他命令和配置选项来满足特定的需求。
-
添加编译器选项:使用
add_compile_options()
命令来添加特定的编译器选项,例如:add_compile_options(-Wall -Wextra)
-
设置输出路径:使用
set()
命令来设置可执行文件和库文件的输出路径,例如:set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
-
宏定义:使用
add_definitions()
命令来添加宏定义,例如:add_definitions(-DDEBUG_MODE)
-
配置测试:使用
enable_testing()
命令启用测试,并使用add_test()
命令来添加测试,例如:enable_testing() add_test(NAME mytest COMMAND myapp --test)
-
导入和导出库:使用
export()
和import()
命令来导出和导入库,以便在其他项目中使用,例如:export(TARGETS mylib FILE MyLibTargets.cmake) import(MyLibTargets.cmake)
-
安装规则:使用
install()
命令来定义安装规则,指定需要安装的文件和目录,例如:install(TARGETS myapp DESTINATION bin) install(FILES myheader.h DESTINATION include)
-
外部项目依赖管理:使用
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 )
-
自定义模块和函数:你可以编写自定义的 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=.