0

0

c++如何编写一个CMakeLists.txt文件_c++项目CMake配置基础

尼克

尼克

发布时间:2025-10-22 08:44:01

|

705人浏览过

|

来源于php中文网

原创

最小CMake配置包括版本、项目名和可执行文件;2. 推荐用target_compile_features设置C++标准;3. 多源文件可手动列出或GLOB收集;4. 用target_include_directories添加头文件路径;5. target_link_libraries链接静态或系统库;6. 支持多构建模式并可定义编译宏;7. 示例展示库与可执行文件的组织方式。

c++如何编写一个cmakelists.txt文件_c++项目cmake配置基础

编写一个 CMakeLists.txt 文件是管理 C++ 项目构建过程的基础。CMake 是跨平台的构建系统生成器,通过它你可以定义项目的编译方式、依赖关系和输出目标。下面是一个从零开始配置 C++ 项目的 CMake 基础指南。

1. 最小可运行的 CMakeLists.txt

一个最简单的 C++ 项目只需要一个源文件和基本的 CMake 配置:

cmake_minimum_required(VERSION 3.10)

project(MyApp)

立即学习C++免费学习笔记(深入)”;

add_executable(myapp main.cpp)

说明:

  • cmake_minimum_required:指定所需最低 CMake 版本,避免使用旧版本导致兼容问题。
  • project:定义项目名称(MyApp),会自动设置一些变量如 MyApp_BINARY_DIR。
  • add_executable:将 main.cpp 编译为可执行文件 myapp。

2. 设置 C++ 标准和编译选项

现代 C++ 通常使用 C++17 或更高标准,需显式指定:

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_CXX_EXTENSIONS OFF)

或者更推荐的方式,针对特定目标设置:

add_executable(myapp main.cpp)

target_compile_features(myapp PRIVATE cxx_std_17)

优点: target_compile_features 更精确,且支持不同目标使用不同标准。

3. 添加多个源文件

如果项目包含多个 .cpp 文件,可以列出所有源文件:

set(SOURCES

src/main.cpp

src/utils.cpp

src/logger.cpp

)

add_executable(myapp ${SOURCES})

百度智能云·曦灵
百度智能云·曦灵

百度旗下的AI数字人平台

下载

也可以用 file(GLOB ...) 自动收集源文件(适合小型项目):

file(GLOB SOURCES "src/*.cpp")

add_executable(myapp ${SOURCES})

注意: GLOB 方式在文件增删后可能不会触发重新配置,建议手动列出或结合脚本使用。

4. 包含头文件目录

当头文件不在默认路径时,需要添加包含目录:

target_include_directories(myapp PRIVATE include)

PRIVATE 表示仅该目标内部使用;若其他项目依赖此目标并需要访问头文件,可用 INTERFACE 或 PUBLIC。

例如,include 目录结构如下:

myproject/ ├── CMakeLists.txt ├── include/ │ └── mylib.h └── src/ └── main.cpp

5. 链接库文件

若项目依赖静态库或动态库,使用 target_link_libraries:

add_executable(myapp main.cpp)

target_link_libraries(myapp PRIVATE some_library)

链接系统库(如 pthread):

target_link_libraries(myapp PRIVATE pthread)

如果是自己定义的库:

add_library(mylib STATIC src/mylib.cpp)

target_include_directories(mylib PUBLIC include)

add_executable(myapp main.cpp)

target_link_libraries(myapp PRIVATE mylib)

6. 调试与发布模式

CMake 默认支持多配置模式。可通过命令行指定:

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make

常用类型:Debug、Release、RelWithDebInfo、MinSizeRel。

在 Debug 模式下自动定义宏 DEBUG:

if(CMAKE_BUILD_TYPE STREQUAL "Debug")

target_compile_definitions(myapp PRIVATE DEBUG)

endif()

7. 完整示例:带子目录的小型项目

假设项目结构如下:

. ├── CMakeLists.txt ├── include │ └── hello.h ├── src │ ├── hello.cpp │ └── main.cpp

根目录 CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(HelloWorld VERSION 1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 添加库
add_library(hello_lib STATIC
src/hello.cpp
)

# 导出头文件路径
target_include_directories(hello_lib PUBLIC
include
)

# 添加可执行文件
add_executable(app src/main.cpp)

# 链接库
target_link_libraries(app PRIVATE hello_lib)

基本上就这些。掌握这些基础后,可以逐步扩展到使用 findpackage 引入第三方库、创建安装规则、支持测试等高级功能。关键是理解 target* 系列命令的作用范围和现代 CMake 的“目标导向”理念。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

736

2023.08.22

go中interface用法
go中interface用法

本专题整合了go语言中int相关内容,阅读专题下面的文章了解更多详细内容。

76

2025.09.10

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

34

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

33

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

18

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

12

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 45.9万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号