news 2026/5/30 0:30:32

CMake 基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake 基础

CMake 基础教程:从零开始掌握核心概念

CMake 是现代 C/C++ 项目最主流的构建系统工具,它不直接编译代码,而是根据你写的CMakeLists.txt文件生成平台原生的构建脚本(如 Makefile、Ninja、Visual Studio 项目等)。本篇聚焦基础,帮助你快速上手最常用的命令和写法。

1. CMake 的基本工作流程
  1. 编写CMakeLists.txt(项目配置文件)
  2. 在构建目录执行:
    cmake<源码路径># 配置阶段:生成构建系统(Makefile 等)cmake --build.# 构建阶段:真正编译

推荐始终使用源码外构建(out-of-source build):

mkdirbuildcdbuild cmake..# .. 表示源码目录cmake --build.
2. 最简 Hello World 项目

项目结构:

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

main.cpp

#include<iostream>intmain(){std::cout<<"Hello CMake!"<<std::endl;return0;}

CMakeLists.txt(基础必备三行)

cmake_minimum_required(VERSION 3.10) # 1. 指定 CMake 最低版本 project(HelloCMake # 2. 定义项目名称(可选指定语言) VERSION 1.0 DESCRIPTION "My first CMake project" LANGUAGES CXX) # 只启用 C++(默认启用 C 和 CXX) add_executable(hello main.cpp) # 3. 生成可执行目标 hello

构建运行:

mkdirbuild&&cdbuild cmake..cmake --build../hello# Linux/macOS# 或 hello.exe # Windows
3. 核心基础命令详解
命令作用常用写法
cmake_minimum_required(VERSION x.y)指定 CMake 最低版本,避免旧版本兼容问题cmake_minimum_required(VERSION 3.15)
project(name)定义项目名称、版本、描述、语言project(MyApp LANGUAGES CXX C)
add_executable(target sources...)创建可执行文件目标add_executable(app main.cpp util.cpp)
`add_library(target [STATICSHAREDMODULE] sources…)`
target_include_directories(target scope dirs...)为目标添加头文件搜索路径target_include_directories(app PRIVATE include)
target_link_libraries(target scope libs...)为目标链接库target_link_libraries(app PRIVATE pthread fmt)
set(CMAKE_CXX_STANDARD 17)全局设置 C++ 标准set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

scope(作用域)说明

  • PRIVATE:只影响当前目标(编译时使用)
  • INTERFACE:只影响依赖当前目标的其他目标
  • PUBLIC:两者都影响(最常用)
4. 指定 C++ 标准(非常重要)

推荐方式(现代 CMake):

# 方法1:全局设置(简单) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 方法2:目标级别(更灵活,推荐) target_compile_features(myapp PRIVATE cxx_std_17) # 支持 11/14/17/20/23
5. 多文件项目基础示例

项目结构:

myapp/ ├── CMakeLists.txt ├── main.cpp ├── include/ │ └── utils.h └── src/ └── utils.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 3.15) project(MyApp LANGUAGES CXX) add_executable(myapp main.cpp src/utils.cpp ) target_include_directories(myapp PRIVATE include) # 添加 include 目录 target_compile_features(myapp PRIVATE cxx_std_17)
6. 基础变量一览
变量含义示例
${PROJECT_NAME}项目名称MyApp
${CMAKE_SOURCE_DIR}项目根源码目录/path/to/myapp
${CMAKE_BINARY_DIR}构建目录/path/to/myapp/build
${CMAKE_CURRENT_SOURCE_DIR}当前 CMakeLists.txt 所在目录用于子目录
${CMAKE_CXX_COMPILER}使用的 C++ 编译器g++ / clang++ / cl.exe
7. 常用构建类型
cmake..-DCMAKE_BUILD_TYPE=Debug# 调试版(带 -g)cmake..-DCMAKE_BUILD_TYPE=Release# 发布版(带 -O3)

在多配置生成器(如 Visual Studio)中,可在 IDE 中切换 Debug/Release。

8. 基础小结 checklist

一个合格的基础CMakeLists.txt通常包含:

cmake_minimum_required(VERSION 3.15) # 现代版本起点 project(MyProject VERSION 1.0 LANGUAGES CXX) add_executable(${PROJECT_NAME} # 使用项目名作为目标名 main.cpp src/file1.cpp src/file2.cpp) target_include_directories(${PROJECT_NAME} PRIVATE include) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)

掌握以上内容,你已经能管理 90% 的小型到中型 C++ 项目了!

后续可以继续学习:

  • 子目录管理(add_subdirectory()
  • 查找外部库(find_package()
  • 安装规则(install()
  • 测试(add_test()+ CTest)

如果你想看更具体的例子(如添加第三方库、静态/动态库分离、多目录结构等),随时告诉我,我继续深入讲解!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 18:16:20

CMake 构建流程

CMake 构建流程详解 CMake 的构建过程分为两个主要阶段&#xff1a;配置阶段&#xff08;Configure&#xff09; 和 构建阶段&#xff08;Build&#xff09;&#xff0c;可选还有测试阶段&#xff08;Test&#xff09; 和 安装阶段&#xff08;Install&#xff09;。理解这个流…

作者头像 李华
网站建设 2026/5/30 10:40:43

16、地图与位置功能开发指南

地图与位置功能开发指南 1. 地图与位置功能基础 在开发过程中,有一个新函数会接收 _coords 参数,并将这些值作为自定义字段传递给 Appcelerator 云服务的照片对象。Appcelerator 云服务支持对照片对象进行地理定位查询,这样就能利用存储在照片自定义字段中的信息来查找照…

作者头像 李华
网站建设 2026/5/28 18:16:19

终极SQL查询压力测试指南:SqlQueryStress完整使用教程

终极SQL查询压力测试指南&#xff1a;SqlQueryStress完整使用教程 【免费下载链接】SqlQueryStress SqlQueryStress 是一个用于测试 SQL Server 查询性能和负载的工具&#xff0c;可以生成大量的并发查询来模拟高负载场景。 通过提供连接信息和查询模板&#xff0c;可以执行负载…

作者头像 李华
网站建设 2026/5/29 22:35:17

PaddlePaddle镜像集成飞桨框架最新版,全面支持Transformer结构

PaddlePaddle镜像集成飞桨框架最新版&#xff0c;全面支持Transformer结构 在中文自然语言处理的实际落地过程中&#xff0c;开发者常常面临一个尴尬的局面&#xff1a;模型设计得再精巧&#xff0c;一旦进入部署阶段&#xff0c;就可能因为环境依赖错乱、CUDA版本不匹配或Pyth…

作者头像 李华
网站建设 2026/5/29 22:15:22

终极指南:在Jupyter环境中轻松运行C代码的完整方案

你是否厌倦了传统的C语言开发流程&#xff1f;在编辑器和终端之间来回切换、手动编译调试的过程是否让你感到繁琐&#xff1f;现在&#xff0c;通过Jupyter C Kernel&#xff0c;你可以获得全新的C语言开发体验。这个开源项目将C语言的强大功能完美融入交互式的Jupyter Noteboo…

作者头像 李华
网站建设 2026/5/30 18:57:27

海尔智能设备无缝接入HomeAssistant:打破品牌壁垒的完整指南

海尔智能设备无缝接入HomeAssistant&#xff1a;打破品牌壁垒的完整指南 【免费下载链接】haier 项目地址: https://gitcode.com/gh_mirrors/ha/haier 在智能家居蓬勃发展的今天&#xff0c;用户面临的最大困扰往往是不同品牌设备之间的兼容性问题。海尔作为家电行业的…

作者头像 李华