手把手教你玩转CMake构建工具(实战向教程)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

前言:为什么要学CMake?

还在被各种IDE的工程配置折磨?每次换开发环境都要重新配置项目?CMake就是你的救星!(认真脸)这个跨平台的构建工具,能让你用一份配置文件通吃Windows/Linux/macOS三大平台。最近帮学弟调试项目时发现,很多新手对CMake的认知还停留在"复制粘贴CMakeLists.txt"阶段,今天我们就来彻底搞懂它!

第一步:安装姿势要对

Windows用户看这里

  1. 官网下载安装包(推荐3.25+版本)
    https://cmake.org/download/
    (注意!安装时一定要勾选Add to PATH选项!!!)

  2. 验证安装是否成功:

    cmake --version
    

    看到类似cmake version 3.28.2024的输出就稳了

Linux/macOS用户更简单

直接使用包管理器:

# Ubuntu/Debian
sudo apt install cmake

# macOS
brew install cmake

核心战场:CMakeLists.txt

先来个最小化模板感受一下(建议边看边动手试):

cmake_minimum_required(VERSION 3.10)
project(MyApp LANGUAGES CXX)

add_executable(demo main.cpp)

这个配置文件做了三件大事:

  1. 声明CMake最低版本要求(防版本兼容问题)
  2. 定义项目名称和编程语言
  3. 添加可执行文件目标

(划重点)实际项目中我们还需要处理头文件包含、库链接等操作,继续往下看进阶操作!

构建项目正确姿势

推荐使用out-of-source构建方式(构建产物和源码分离):

# 创建并进入构建目录
mkdir build && cd build

# 生成构建系统(示例用Makefile)
cmake ..

# 开始编译
make -j4

(超级重要)绝对不要在源码目录直接运行cmake!否则你的源码目录会被各种构建文件污染!

必备技能:安装目标

想让别人也能用你的库?install命令安排上:

install(TARGETS demo
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

执行安装命令:

cmake --install . --prefix "/your/install/path"

这样就能把编译好的文件安装到指定目录啦~

跨平台兼容黑科技

处理不同平台的差异时,可以这样写:

if(WIN32)
    # Windows特有配置
    add_definitions(-DWIN32_LEAN_AND_MEAN)
elseif(UNIX)
    # Linux/macOS配置
    find_package(Threads REQUIRED)
endif()

调试CMake的骚操作

遇到诡异问题时,试试这些调试命令:

# 打印变量值
message(STATUS "当前编译器:${CMAKE_CXX_COMPILER}")

# 开启详细输出
set(CMAKE_VERBOSE_MAKEFILE ON)

避坑指南(血泪经验)

  1. 路径分隔符要用/,CMake会自动转换
  2. 变量作用域很关键(function会创建新作用域)
  3. 推荐使用target_xxx系列命令替代旧的全局命令
  4. 第三方库找不到?试试find_package的MODULE模式

最佳实践总结

  1. 每个子目录都放独立的CMakeLists.txt
  2. 使用include()管理通用配置
  3. 善用add_subdirectory组织项目结构
  4. 给target设置C++标准:
    target_compile_features(demo PUBLIC cxx_std_17)
    

结语

CMake就像乐高积木,基础语法看似简单,但组合起来能构建出庞大的项目体系。建议从本文的示例开始,逐步添加自己的项目配置。刚开始可能会被各种语法搞懵,但坚持写几个项目后,你会发现原来那些复杂的构建过程都可以被优雅地管理!(亲身经历验证)

下次遇到CMake报错时别慌,仔细看错误信息,八成是路径写错了或者忘记加某个依赖库。如果还是搞不定,欢迎在评论区交流讨论~(记得附上你的CMakeLists.txt片段)

CMake构建工具使用教程 CMake是一个开源的、跨平台的C++构建工具 阅读详情

相关推荐

cmake教程|cmake入门实战

旧博文,搬到 csdn 原文:http://rebootcat.com/2020/09/02/cmake/ 前言 我是一个 linux c++ 开发者,但是一直对 Makefile 的语法很是头痛,每次都记不住,所以每次写 Makefile 都很痛苦,Makefile 里需要你自己编写依赖和推导规则,这个过程能不能简单点呢? 对于编译一个 C++ 工程来说,也许需要的就是头文件路径、库路径、编译参数,剩下的东西基本也不重要,这三样足够去编译一个工程了。所以有没有一个工具能简单点的去实现 C++ 项目的构.

人至贱则无敌 2192

CMake构建配置

cmake构建目标文件,以及构建目标文件的属性设置等

u010378559的博客 4342

CMake构建工程配置HarmonyOS编译工具

CMake是一个跨平台的构建工具,用于管理构建过程、编译、链接和打包软件项目,它可以生成Makefile等用于不同操作系统和编译器的构建脚本。CMake的配置过程是跨平台的,因此可以在不同的操作系统上运行,例如Linux、Windows和macOS。配置(Configuration):配置阶段是CMake解析CMakeLists.txt文件的过程。在配置阶段,CMake会读取CMakeLists.txt文件,并执行其中的命令。

shangkangba的博客 1247

【C++开发】CMake构建工具

CMake工具的使用

m0_74246469的博客 1422

cmake 构建工具 一 hello world

指定需要编译的源文件指定头文件的搜索目录指定库文件的搜索目录需要链接的动态库和静态库指定需要额外定义的宏或者取消定义的宏来控制编译指定编译优化选项指定语言标准等等直接使用gcc/g++命令在使用代码文件不多,库直接的依赖关系不复杂的情况下是可以接受的。但是在一些大型项目中,源文件上千上万,各个文件和库直接的依赖关系复杂,如果还手动输入编译命令的话,复杂度就会变得很大。简单来讲,代码变成可执行文件,叫做编译(compile);

kangshuangzhu的博客 1363

cmake工具构建工程】

include_directories 命令用来指明头文件所在的路径,并且使用到了 PROJECT_SOURCE_DIR 变量,该变量指向了一个路径,我们已经加入了多个源文件,但是这些源文件都是放在同一个目录下,这样还是不太正规,我们应该将这些源文件按照类型、功能、模块给它们放置到不同的目录下。add_subdirectory 命令, 该命令告诉 cmake 去子目录中寻找新的CMakeLists.txt 文件并解析它;⚫ libhello 目录下的 CMakeLists.txt。

sinat_23896491的博客 687

cmake跨平台构建工具

cmake跨平台构建工具

wtl666_6的博客 7328

CMake构建工具

CMake 是一个跨平台的开源构建工具,用于管理和构建 C++ 项目。它允许开发人员使用简单的配置文件来描述项目的构建过程,然后根据这些配置文件生成特定于平台的构建系统(如 Makefile、Visual Studio 项目等),从而实现跨平台的项目构建。跨平台性:CMake 可以生成适用于各种操作系统和构建工具构建文件,包括 Linux、Windows、macOS 等,以及各种编译器和 IDE。简单的配置文件。

qq_51482778的博客 2607

CMake使用教程

CMake简介CMake是一个跨平台的、开源的构建工具cmake是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.目前很多开源的项目都可以通过CMake工具来轻松构建工程,例如博客之前分享的openHMD、hidapi、OSVR-Core等等,代码的分享者提供源代码和相应的Cmake配置文件,使用者就可以非常方便的在自己的

3万+

CMake入门教程PDF下载:轻松掌握CMake构建工具

CMake入门教程PDF下载:轻松掌握CMake构建工具 【下载地址】CMake入门教程PDF下载 这是一个专为CMake初学者设计的开源项目,提供了《从零详解CMake.pdf》资源文件,帮助用户轻松掌握CMake的基础知识。该文档内容浅显易懂,从环境搭建到实际应用,逐步引导您学习CMake的核心概念与技巧。为了进一步...

gitblog_06768的博客 919

Qt Creator + CMake 构建教程

Qt 6 以下的版本使用构建可能会存在一些问题。

falwat的专栏 8005

现代 CMake 简明教程(一)- CMake 基础

系列文章目录 现代 CMake 简明教程(一) - CMake 基础 前言 用 CMake构建 C/C++ 项目是业内的主流做法。最近,我们的项目代码做了一些拆分和合并:引入其他仓库代码,并且将公共部分拆分以供多个仓库同时使用。为此,就得修改项目中的 CMake 以满足需求。 在做这件事情时,过程是相当痛苦的,修改的难度超过了我的预期。这份痛苦的回忆,让我陷入了沉思:这 CMake 咋这么不好使,是我的使用姿势不对吗?CMake 的最佳实践是啥? 在经过一番搜索和学习,我开始了解 Modern

记录学习的过程 1万+

CMake实战教程:从零到一构建项目

CMake实战教程:从零到一构建项目 项目介绍 本教程基于CMake,一个广泛使用的跨平台自动化构建系统,旨在帮助开发者高效地管理他们的项目构建过程。CMake使得项目能在多种编译环境中保持一致的构建规则,无论是Linux、Windows还是macOS。通过这个开源项目,我们将深入了解如何配置CMake文件,快速搭建项目结构,并掌握一些高级用法。 项目快速启动 安装CMake 首先,确保你的开发环...

gitblog_00143的博客 1153

CMakeCMake构建项目入门

本文介绍了CMake跨平台构建工具的基本使用方法。首先讲解了CMake的安装(Ubuntu系统)和版本检查,然后通过Hello World示例演示了完整的构建流程:创建CMakeLists.txt配置文件,使用PROJECT、SET、MESSAGE、ADD_EXECUTABLE等核心指令,以及内部/外部构建方式的区别。重点解析了CMake语法规则,包括变量引用、指令参数格式等注意事项。最后建议完善工程结构,添加src源代码目录、doc文档目录和README等文件。文章配有详

Antonio915的博客 1676

CMake 实战入门教程

之前学习CMake是通过官方教程文档进行学习的,在学习中发现,CMake官方的教程文档没有详细介绍每个命令和变量的用法,这也导致学一半时会感觉一头雾水。但它也并不无优点,官方教程文档采用了渐进式的实战教程方式,非常注重学习过程中的实践,这一点是很可贵的。为了加深命令和变量的理解,我查阅了很多api文档才搞明白。因此,为了跟大家分享更好的CMake学习文档,本教程诞生了。

Leon_Chenl的博客 2064

cmake入门教程 跨平台项目构建工具cmake介绍

cmake的安装命令如下:CMake提供cmake、ctest和cpack三个命令行工具分别负责构建、测试和打包。本文主要介绍cmake命令。生成构建系统(buildsystem,比如make工具对应的Makefile);执行构建(比如make),生成目标文件;执行测试、安装或打包。

朝气蓬勃 4071

Cmake项目构建教程

project定义项目的名称和语言,MyProject是项目的名称,它会被赋值给cmake的预定义变量 ${PROJECT_NAME},并且可以在整个 CMakeLists.txt 文件中使用这个变量来引用项目名称。在这个例子中,表示项目使用C和C++语言。除了包含example目录的源文件外,需要再将子目录demo加到变量中,使用include_directories指定编译器在编译源文件时搜索头文件的路径(仅影响项目路径,不影响生成的构建目标),最后使用add_library生成一个当前目录的库。

qq_32634339的博客 1567

基于Cmake+QT+VS的C++项目构建开发编译简明教程

目录 一、工具下载与安装 1. Qt 2. Visual Studio 2015 3. Cmake 二、C++及Qt项目构建 1. 基于VS构建Qt项目 2. 基于Qt Creater构建,在VS中使用 用Qt Creater构建项目 用VS开发Qt Creater生成的项目 3. 基于Cmake构建CMake-Gui构建 ...

weixin_30632089的博客 4933

升级构建工具,从Makefile到CMake

更多博文,请看音视频系统学习的浪漫马车之总目录 上一篇文章一篇文章入门C/C++自动构建利器之Makefile介绍了构建项目的脚本工具Makefile,相比于手动执行gcc命令来说,已经方便了太多了。不过如果只用Makefile构建项目,会有一个问题,那就是不支持跨平台的问题,因为Makefile脚本中的命令是和具体平台绑定的,比如上篇文章就是用GNU的gcc命令,那如果项目要移植到其他不能使用gcc命令的平台,那又要重新写一套Makefile,这可不符合懒惰的程序员群体,所以支持跨平台语法又更简洁的CMa

易水南风的专栏 4288
上一篇: Cadence 16.6 保姆级入门指南:从安装到画原理图全流程(附避坑秘籍)
下一篇: 手把手教你用VS Code搭建C++开发环境(2024最新指南)
debugdynamo
博客等级 码龄1年 101粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值