C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程


首先给出明确答案,CMake是C++项目中主流的构建系统生成工具,通过编写CMakeLists.txt文件生成跨平台构建文件。具体描述:文章介绍了CMake的基本使用流程,从环境准备、简单项目构建到多文件多目录管理,涵盖编译器与CMake安装验证、最小CMakeLists.txt编写、外部构建目录创建、静态库添加、C++标准设置及target_include_directories等现代CMake最佳实践,并指出其跨平台特性与扩展功能方向。顺序与原文一致,内容完整无截断。

c++如何使用cmake构建项目_c++ cmakelists.txt编写入门教程

C++项目管理中,CMake 是目前最主流的构建系统生成工具之一。它不直接编译代码,而是根据 CMakeLists.txt 文件生成适用于不同平台的构建文件(如 Makefile 或 Visual Studio 工程)。本文将带你从零开始编写一个简单的 CMakeLists.txt,快速上手 C++ 项目的 CMake 构建流程。

1. 准备工作:安装 CMake 和编译器

在使用 CMake 前,请确保你的系统已安装:

  • 一个 C++ 编译器(如 GCC、Clang 或 MSVC)
  • CMake(建议版本 3.10 以上)

可通过终端运行以下命令验证是否安装成功:

cmake --version
g++ --version

2. 创建最简单的 C++ 项目

假设你的项目结构如下:

my_project/
├── CMakeLists.txt
└── main.cpp

先创建 main.cpp

#include iostream>

int main() {
std::cout return 0;
}

然后创建同目录下的 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(MyProject)

add_executable(myapp main.cpp)

说明:

  • cmake_minimum_required:指定所需最低 CMake 版本
  • project:定义项目名称(可选添加 VERSION 和 LANGUAGES)
  • add_executable:将源文件编译为可执行文件,myapp 是输出的程序名

3. 构建并运行项目

在项目根目录下打开终端,执行:

mkdir build
cd build
cmake ..
cmake --build .

解释:

  • 创建 build 目录用于存放中间文件,避免污染源码(推荐做法)
  • cmake .. 读取上级目录的 CMakeLists.txt 并生成构建系统
  • cmake --build . 调用底层构建工具(如 make)编译项目

构建成功后,在 build 目录会生成可执行文件 myapp,运行它:

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video ./myapp

应输出:Hello from CMake!

4. 添加多个源文件和子目录

当项目变大时,通常会组织成多个源文件和子目录。例如:

my_project/
├── CMakeLists.txt
├── main.cpp
├── src/
│ ├── math.cpp
│ └── math.h
└── include/
└── math.h

修改顶层 CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(MyProject)

# 指定头文件搜索路径
include_directories(include)

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

如果你希望模块化管理 src 目录,可以添加子 CMakeLists.txt:

# my_project/src/CMakeLists.txt
add_library(math_lib STATIC math.cpp)

然后在主 CMakeLists.txt 中包含该目录:

cmake_minimum_required(VERSION 3.10)
project(MyProject)

include_directories(include)
add_subdirectory(src)

add_executable(myapp main.cpp)
target_link_libraries(myapp math_lib)

这里使用了:

  • add_subdirectory:包含子目录中的 CMakeLists.txt
  • add_library(... STATIC):创建静态库
  • target_link_libraries:将库链接到目标可执行文件

5. 设置 C++ 标准

现代 C++ 项目常使用 C++11/14/17/20。可在 CMakeLists.txt 中指定:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器扩展(更标准)

或者针对特定目标设置(推荐):

target_compile_features(myapp PRIVATE cxx_std_17)

6. 常见技巧与注意事项

  • 始终使用 build 目录进行外部构建
  • 使用 target_include_directories 替代全局 include_directories,更安全:
  • target_include_directories(myapp PRIVATE include)
  • 通过 cmake-guiccmake 查看和配置变量
  • 跨平台时可用 if(MSVC)if(UNIX) 分支处理差异

基本上就这些。掌握以上内容,你已经能用 CMake 管理大多数中小型 C++ 项目。随着项目复杂度上升,可进一步学习 find_package、自定义函数、导出配置等高级功能。CMake 虽语法略显独特,但一旦熟悉,其跨平台能力非常强大。

以上就是C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程的详细内容,更多请关注其它相关文章!


# cmake  # c++  # AI-powered  # red  # stream  # ios  # unix  # ai  # 工具  # app  # 敦化定制网站建设公司  # 巫溪公司网站推广招聘  # 广东seo软件获客软件  # seo专员具备哪些能力  # 西安网站优化内容  # 连云港湖南网站优化推广  # seo和sem的比较  # 推荐seo书籍  # 网站设计建设专家名单查询  # 丽水seo加盟  # 适用于  # 如果你  # 第三方  # 微软  # 多个  # 随机数  # 如何使用  # 自定义  # 可执行文件 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 苹果SE如何开启单手模式_苹果SE单手操作功能  XPath动态元素定位:如何精准选择文本内容变化的元素  123网页端官方登录页 123邮箱网页版即时通讯服务  国际经济与贸易就业方向解析  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  秋风萧瑟洪波涌起中的萧瑟指的是什么  Go语言中方法与接收器:指针和值类型的调用机制详解  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  《海底捞》点外卖方法  第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  J*a中导出MySQL表为SQL脚本的两种方法  如何配置VS Code作为您Git操作的默认编辑器  Mac如何开启画中画模式_Mac Safari浏览器视频画中画功能  J*aScript事件处理:优化键盘输入与表单提交的实践指南  Highcharts雷达图径向轴数值标签实现教程  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  服装短视频如何起号推广?服装短视频起号推广有什么要求?  《波斯王子:失落的王冠》剑术大师打法攻略  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  Go反射进阶:访问内嵌结构体中的被遮蔽方法  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  如何使用 composer 和 aop-php 实现 AOP 编程?  Google Drive API服务器端访问指南:服务账户认证详解  芒果TV官网登录入口 芒果TV官方网站登录入口  优化2xN网格最大路径和的动态规划算法实践  火柴人战争网页版在线玩  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  菜鸟裹裹怎样获得取件码_菜鸟裹裹获得取件码步骤  实现可重用自定义Python Range类  铁路12306官网入口 铁路12306中国铁路官网登录首页  《鹿路通》退余额方法  realme 10 Pro息屏方案_realme 10 Pro省电策略  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  使用VS Code调试Python代码:从入门到精通  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  《大周列国志》皇帝律令功能介绍  使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留  照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程  获取WooCommerce产品在后台编辑页面的分类ID  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  阿里云共享相册入口在哪  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.