欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > CMakeLists.txt的学习了解

CMakeLists.txt的学习了解

2025/5/10 12:33:58 来源:https://blog.csdn.net/qq_53092426/article/details/142315664  浏览:    关键词:CMakeLists.txt的学习了解

CMakeLists.txt 是 CMake 构建系统中的配置文件,用于定义项目的编译规则和依赖关系。CMake 是一种跨平台的构建系统,支持从源代码生成编译脚本(如 Makefile 或 Visual Studio 工程文件)。CMakeLists.txt 通过指定项目信息、源文件、编译选项、库等,指导 CMake 如何构建项目。

下面介绍 CMakeLists.txt 的编写规则与方法:

1. 基本结构

CMakeLists.txt 通常包含以下几个部分:

  1. 指定 CMake 最低版本
  2. 定义项目名称和语言
  3. 添加源文件
  4. 指定目标(可执行文件或库)
  5. 配置库与依赖
  6. 设置编译选项
  7. 安装和测试

2. 常用命令

2.1. cmake_minimum_required

作用: 设置项目要求的 CMake 最低版本。

cmake_minimum_required(VERSION 3.10) 

这个命令指定了项目必须使用 CMake 3.10 或更高的版本。

2.2. project

作用: 定义项目的名称和使用的语言。

project(MyProject LANGUAGES C CXX) 

project 命令设置项目名称为 MyProject,并指定使用的语言为 CC++

2.3. add_executable / add_library

作用: 添加一个可执行文件或库。

  • add_executable 用于定义可执行文件。
  • add_library 用于定义静态或动态库。
add_executable(MyApp main.cpp) # 创建可执行文件 MyApp,源文件为 main.cpp add_library(MyLib STATIC mylib.cpp) # 创建静态库 MyLib,源文件为 mylib.cpp 
2.4. target_link_libraries

作用: 将库链接到目标(如可执行文件或另一个库)。

target_link_libraries(MyApp PRIVATE MyLib) # 链接 MyLib 库到 MyApp 可执行文件 
2.5. set

作用: 设置变量,可以是编译选项、路径或用户自定义变量。

set(CMAKE_CXX_STANDARD 17) # 设置 C++ 标准为 C++17 
2.6. include_directories

作用: 指定头文件搜索路径。

include_directories(${CMAKE_SOURCE_DIR}/include) # 添加 include 文件夹到头文件搜索路径 
2.7. add_subdirectory

作用: 将子目录添加到构建中,允许多目录组织项目。

add_subdirectory(src) # 将 src 子目录添加到构建 
2.8. find_package

作用: 查找外部库或包,并设置必要的链接和头文件路径。

find_package(OpenCV REQUIRED) # 查找 OpenCV 库,REQUIRED 表示未找到时报错 target_link_libraries(MyApp PRIVATE ${OpenCV_LIBS}) # 链接 OpenCV 库到 MyApp 
2.9. install

作用: 定义安装目标(如可执行文件、库、头文件等)。

install(TARGETS MyApp DESTINATION bin) # 将 MyApp 可执行文件安装到 bin 目录 
install(FILES myheader.h DESTINATION include) # 安装头文件到 include 目录 
2.10. option

作用: 定义选项,允许用户在生成时启用或禁用特定功能。

option(ENABLE_TESTS "Enable test builds" ON) # 定义是否启用测试,默认开启 
2.11. if/else/endif

作用: 条件编译,类似于其他编程语言中的条件语句。

if(ENABLE_TESTS) add_subdirectory(tests) # 如果 ENABLE_TESTS 为 ON,添加 tests 目录 endif() 

3. 示例

简单示例
cmake_minimum_required(VERSION 3.10) 
# 定义项目 
project(MyApp LANGUAGES CXX) 
# 设置 C++ 标准 
set(CMAKE_CXX_STANDARD 17) 
# 指定可执行文件 
add_executable(MyApp main.cpp) 
# 添加头文件路径 
include_directories(${CMAKE_SOURCE_DIR}/include) 
# 链接库(如果有其他库) 
# target_link_libraries(MyApp PRIVATE MyLib) 
带外部依赖库的示例(使用 OpenCV)
cmake_minimum_required(VERSION 3.10) 
project(MyApp LANGUAGES CXX) 
set(CMAKE_CXX_STANDARD 17) 
# 查找 OpenCV 库 
find_package(OpenCV REQUIRED)
# 指定可执行文件 
add_executable(MyApp main.cpp) 
# 链接 OpenCV 库 
target_link_libraries(MyApp PRIVATE ${OpenCV_LIBS}) 
多目录示例
cmake_minimum_required(VERSION 3.10) 
project(MyProject LANGUAGES CXX) 
# 设置 C++ 标准 
set(CMAKE_CXX_STANDARD 17) 
# 添加子目录 
add_subdirectory(src) 
add_subdirectory(tests) 
# 安装可执行文件 
install(TARGETS MyApp DESTINATION bin) 
含条件编译和选项的示例
cmake_minimum_required(VERSION 3.10) 
project(MyProject LANGUAGES CXX) 
set(CMAKE_CXX_STANDARD 17) 
# 定义选项 
option(ENABLE_TESTS "Enable test builds" ON) 
# 添加可执行文件 
add_executable(MyApp main.cpp) 
# 如果启用了测试,添加测试目录 
if(ENABLE_TESTS) add_subdirectory(tests) 
endif() 

4. 规则与最佳实践

  1. 明确指定 CMake 最低版本: 使用 cmake_minimum_required() 指定最低版本,确保构建脚本的兼容性。
  2. 合理组织项目目录: 使用 add_subdirectory() 管理子目录,保持项目的清晰和模块化。
  3. 充分利用变量和选项: 使用 set()option() 定义灵活的构建选项,方便用户自定义构建过程。
  4. 查找和使用外部库: 使用 find_package() 查找外部依赖库,确保项目可以正确链接外部库。
  5. 条件编译与跨平台支持: 使用 if()else() 进行条件编译,编写可跨平台的 CMake 脚本。

通过这些规则和命令,可以灵活地定义构建流程,使项目具备良好的可维护性和跨平台兼容性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词