c++如何使用CMake构建项目_c++现代化构建系统入门
发布时间 - 2026-01-05 00:00:00 点击率:次CMake是现代C++主流构建系统,通过CMakeLists.txt跨平台生成构建脚本。1. 安装需编译器与CMake 3.10+;2. 编写CMakeLists.txt定义项目;3. 外部构建避免污染源码;4. 支持多文件与子目录;5. 可链接静态/动态库;6. 用find_package或FetchContent管理依赖;7. 设置C++标准与编译选项。掌握这些即可高效构建项目。
在现代 C++ 开发中,CMake 已成为主流的构建系统。它跨平台、灵活,并能与编译器、编辑器和测试框架良好集成。相比传统的 Makefile 手动编写,CMake 通过简洁的 CMakeLists.txt 文件描述项目结构,自动生成适用于不同平台的构建脚本(如 Makefile、Ninja、Visual Studio 项目等),极大提升了开发效率。
1. 安装 CMake 与基本环境准备
使用 CMake 前需确保已安装:
- 一个 C++ 编译器(如 GCC、Clang 或 MSVC)
- CMake 工具本身(建议版本 3.10 以上)
在 Linux/macOS 上可通过包管理器安装:
sudo apt install cmake # Ubuntu/Debianbrew install cmake # macOS
Windows 用户可从 cmake.org 下载安装程序。安装后验证:
立即学习“C++免费学习笔记(深入)”;
cmake --version2. 编写最简单的 CMakeLists.txt
创建项目目录并添加源文件 main.cpp:
int main() {
std::cout return 0;
}
在同一目录下创建 CMakeLists.txt:
project(MyApp)
add_executable(myapp main.cpp)
说明:
-
cmake_minimum_required指定最低 CMake 版本 -
project定义项目名称 -
add_executable将源码构建成可执行文件
3. 构建项目:分离构建目录
推荐使用“外部构建”方式,避免污染源码目录:
mkdir buildcd build
cmake ..
cmake --build .
这会在 build/ 目录生成中间文件和最终可执行文件 myapp。调用 cmake .. 读取上级目录的 CMakeLists.txt 并生成构建系统;cmake --build . 执行实际编译。
4. 添加多个源文件与子目录支持
若项目包含多个文件,例如:
src/main.cppsrc/hello.cpp
include/hello.h
修改 CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)project(MyApp)
# 添加头文件搜索路径
include_directories(include)
# 指定所有源文件构建为可执行文件
add_executable(myapp
src/main.cpp
src/hello.cpp
)
对于更复杂的结构,可用 add_subdirectory(src) 将子模块独立管理。
5. 链接库:静态库与动态库
假设你想将 hello.cpp 编译成静态库供主程序使用:
add_library(hello STATIC hello.cpp)
然后在根 CMakeLists.txt 中引入:
project(MyApp)
include_directories(include)
add_subdirectory(src)
add_executable(myapp src/main.cpp)
target_link_libraries(myapp hello)
target_link_libraries 明确指定依赖关系,是现代 CMake 推荐做法。
6. 使用外部依赖:find_package 与 FetchContent
常见第三方库如 Boost、OpenCV 可通过 find_package 查找:
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(myapp ${OpenCV_LIBS})
对于没有系统安装的库,可用 FetchContent 直接从 Git 获取:
FetchContent_Declare(
fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG v9.1.0
)
FetchContent_MakeAvailable(fmt)
target_link_libraries(myapp fmt::fmt)
这种方式实现“开箱即用”,适合 CI 或团队协作。
7. 设置 C++ 标准与编译选项
启用现代 C++ 特性(如 C++17):
set(CMAKE_CXX_STANDARD 17)set(CM
AKE_CXX_STANDARD_REQUIRED ON)
或针对特定目标设置:
target_compile_features(myapp PRIVATE cxx_std_17)也可添加警告选项提升代码质量:
target_compile_options(myapp PRIVATE -Wall -Wextra)基本上就这些。掌握以上内容,你已经可以使用 CMake 构建现代化 C++ 项目。随着项目变大,可进一步学习 install、CPack、测试集成(enable_testing + add_test)等高级功能。CMake 的核心理念是“描述目标而非过程”,写出清晰、可维护的构建脚本,是专业 C++ 开发的重要一环。
# linux
# git
# windows
# github
# app
# ubuntu
# 工具
# mac
# ai
# c++
# ios
# macos
# Static
# include
# int
# private
# visual studio
# opencv
# https
# debian
# 多个
# 可执行文件
# 可通过
# 与子
# 主程序
# 推荐使用
# 适用于
# 也可
# 可以使用
# 你已经
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么在Controller之外的地方验证数据
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何自定义分页视图?(Pagination示例)
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
高端企业智能建站程序:SEO优化与响应式模板定制开发
php 三元运算符实例详细介绍
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
在线制作视频网站免费,都有哪些好的动漫网站?
如何确保FTP站点访问权限与数据传输安全?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
济南网站建设制作公司,室内设计网站一般都有哪些功能?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
实现点击下箭头变上箭头来回切换的两种方法【推荐】
三星网站视频制作教程下载,三星w23网页如何全屏?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
linux写shell需要注意的问题(必看)
百度浏览器如何管理插件 百度浏览器插件管理方法
如何实现建站之星域名转发设置?
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
中山网站推广排名,中山信息港登录入口?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel如何使用Livewire构建动态组件?(入门代码)
如何在阿里云高效完成企业建站全流程?
如何快速搭建安全的FTP站点?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
零服务器AI建站解决方案:快速部署与云端平台低成本实践
javascript中对象的定义、使用以及对象和原型链操作小结
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何在万网开始建站?分步指南解析
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何在万网利用已有域名快速建站?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何快速搭建高效香港服务器网站?
北京网站制作的公司有哪些,北京白云观官方网站?

