CMake入门指南

CMake 完全实战指南:从入门到精通 《CMake 完全实战指南》摘要:CMake 是现代 C/C++ 项目的跨平台构建系统生成器,支持生成 Makefile、VS 项目等多种构建文件。文章从核心概念入手,介绍了基本的 CMakeLists.txt 配置、可执行文件和库的创建与管理方法,以及头文件包含和库链接的语法。实战部分详细讲解了 Makefile 生成、构建与安装命令,推荐了模块化项目结构最佳实践。高级技巧包括条件编译选项、第三方库集成(find_package 和 FetchContent)以及自定义构建命令。指南适合初学者快速上手. 阅读详情

CMake入门指南

该教程基于官方的Tutorial

概述

CMake的功能类似于GNU autotools,都是使用程序化的方式,自动为项目生成对应平台下的编译规则文件(以下简称Makefile)——比如windows平台下各种IDE的project文件,或者Linux平台下的Makefile。CMake的运作依赖于CMakeLists.txt(注意大小写)这个配置文件,这个(些,一个项目中可能存在多个)文件利用各类宏对生成Makefile的过程进行编程。

第一步:编译第一个Hello world程序

详细过程

创建一个项目目录并在项目根目录创建两个文件CMakeLists.txt和main.c。

main.c的内容:

#include <stdio.h>
int main(void) {
  printf("Hello from main.c!\n");

  return 0;
}

CMakeLists.txt的内容:

PROJECT(HELLO)

CMAKE_MINIMUM_REQUIRED(3.0)

SET(SRC_LIST main.c)
MESSAGE(STATUS "The HELLO_BINARY_DIR is " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "The HELLO_SOURCE_DIR is " ${HELLO_SOURCE_DIR})

ADD_EXECUTABLE(hello ${SRC_LIST})

之后在根目录下运行:

cmake .

然后一大堆输出后,可以看到CMake通过检查CMakeLists.txt在当前目录下生成了一大堆文件,以及最关键的Makefile文件。之后的过程就跟正常的make命令使用方式相同了。

一些解释

PROJECT宏

基本格式:PROJECT(NAME [CXX][C][Java])

主要用于指定项目名称和项目语言,这里的项目的名称会影响到<NAME>_BINARY_DIR和<NAME>_SOURCE_DIR两个CMake变量。

CMAKE_MINIMUM_REQUIRED宏

基本格式:CMAKE_MINIMUM_REQUIRED(VERSION)

用于指定需求的最小的cmake版本

SET宏

基本格式:SET(VAR VALUE)

SET宏可以声明CMake变量,VALUE可以使用字符串、变量拼接的方式。

MESSAGE宏

基本格式:MESSAGE(STATUS | SEND_ERROR | FATAL_ERROR VALUE)

MESSAGE用于向控制台输出一条信息。

STATUS: 表明向控制台输出一条普通状态信息

SEND_ERROR: 表明向控制台输出一条普通错误信息

FATAL_ERROR: 表明向控制台输出一条致命错误信息,输出这一信息后,CMake过程将被终止

ADD_EXECUTABLE宏

基本格式:ADD_EXECUTABLE(EXECUTABLE_NAME SRC_FILES)

用于生成一个可执行文件,SRC_FILES是一个用空格隔开的源文件列表

<name>_BINARY_DIR和<name>_SOURCE_DIR内置变量

这两个变量分别指定了项目编译目录和源码目录,更通俗一点,前者是你执行CMake命令时的目录,而后者是你的CMakeLists.txt所在的目录。<name>是你用PROJECT指定的项目名称(区分大小写)。

第二步:更加工程化——添加子目录

详细过程

为了让我们的项目更加专业化,现

现代C++ CMake 指南 - 1 CMake 入门第一步 此外,您还学习了项目的构成要素:目录、列表文件、配置、预设和辅助文件,以及版本控制系统中应忽略的内容。此外,脚本还应知道如何将所有编译好的文件链接成单个二进制文件,或者更理想的是,构建完整的解决方案,这些方案可作为模块被复用并集成到更大的项目中。最后,我们会总结项目中不同文件的用途,并解释如何在不创建项目的情况下使用 CMake。文件中读取缓存的配置变量。首次运行时,由于不存在缓存文件,它会创建一个空的构建树,并收集当前工作环境的所有详细信息:例如系统架构、可用的编译器、已安装的链接器和归档工具等。 阅读详情

相关推荐

CMake 入门指南

CMake 是一个开源的跨平台构建工具,旨在简化软件项目的构建、测试和打包过程。它使用简单的文本文件来描述项目的构建过程,称为。CMake 可以根据这个文件生成不同平台下的本地构建文件,如 Unix 下的 Makefile、Windows 下的 Visual Studio 项目等。

宋志辉的博客 642

CMake 入门指南:CMake 语言

我们了解了如何编写 CMakeLists.txt 文件来描述项目的构建过程,并使用变量、条件语句、循环语句、函数和宏来完成更复杂的构建配置。CMake 是一个功能强大且灵活的构建工具,学习和掌握 CMake 语言将有助于更高效地管理和构建项目。CMake 是一个强大的跨平台构建工具,它使用简单的语法来管理项目的构建过程。CMake 提供了一种名为 CMake 语言的特定领域语言(DSL),用于描述项目的构建配置。本文将介绍 CMake 语言的基本概念和使用方法,并提供相应的源代码示例。指令创建和设置变量。

KgCrystal的博客 180

CMake 入门指南:生成和编译项目

CMake 是一个开源工具,用于管理和构建 C/C++ 项目。它使用名为 CMakeLists.txt 的文本配置文件来描述项目的构建过程,并根据不同的操作系统和编译器生成相应的构建脚本(如 Makefile、Visual Studio 解决方案等)。CMake 提供了一种独立于具体 IDE 的方式来构建项目,使得在不同平台上的项目开发更加便捷。

PixelInk的博客 330

CMake 入门指南:编程学习

在本篇文章中,我们将一起学习如何入门使用 CMake,并通过编程学习来加深对其的理解。CMake 是一个开源的构建工具,它使用简单的语法规则来描述项目的构建过程。与直接使用特定编译器的构建系统不同,CMake 允许你生成与平台无关的构建脚本,从而使你的项目在不同的操作系统和编译器上都能够顺利构建。CMake 的构建过程是通过一个名为 CMakeLists.txt 的文本文件来定义的。命令告诉 CMake 在当前目录中查找 CMakeLists.txt 文件,并生成相应的构建文件。在上述示例中,我们使用。

database_bug768的博客 136

CMake入门指南:项目生成与编译

本文介绍了如何使用CMake进行项目生成与编译。通过CMake,我们可以轻松地将项目移植到不同的平台,并灵活地配置构建规则和编译选项。希望本文能够帮助你快速上手使用CMake,并顺利完成项目的构建和编译。祝你编程愉快!

CyberXZ的博客 381

CMake入门指南:构建现代化的C/C++项目

CMake是一个开源工具,用于自动生成适用于不同构建系统的构建脚本。它的设计目标是简化跨平台项目的构建过程。CMake使用一种名为CMakeLists.txt的配置文件来描述项目的构建配置,并根据这些配置生成相应的构建脚本,如Makefile或Visual Studio项目文件。CMake具有很高的灵活性和可扩展性,可以用于管理各种规模的项目。它支持多个编程语言,包括C、C++、Java和Python等。CMake还可以与其他工具和库集成,如CTest用于测试、CPack用于软件打包和安装等。

KgCrystal的博客 353

变压器铁心100Hz振动噪声的COMSOL磁致伸缩仿真全流程

磁致伸缩是铁磁材料在磁场作用下发生尺寸变化的现象,也是变压器铁心振动与噪声产生的根本原因。由于应变与磁通密度近似成平方关系,50Hz电网激励下铁心振动基频为100Hz。借助COMSOL多物理场仿真,可将磁场计算结果映射为结构应力和变形,完成“电磁—结构”单向耦合分析。该技术广泛应用于变压器振动噪声预测、结构优化及故障诊断等工程场景。本文从磁致伸缩物理机理出发,系统梳理了材料参数、等效建模、边界条件设置和结果校核等关键步骤,帮助工程师掌握从磁致伸缩到结构变形的完整仿真链路,解决实际工程对标难题。

weixin_33796177的博客 312

【生成C01/C10材料常数excel表】

计算橡胶件的邵尔硬度和C01/C10材料常数

weixin_46153372的博客 1932

Mac安装Weblogic教程

1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确...

weixin_40102675的博客 5063

飞腾D2000开发板实战:手把手教你为UEFI/EDK2驱动SD3077 RTC时钟芯片

本文详细介绍了在飞腾D2000开发板上为UEFI/EDK2环境驱动SD3077 RTC时钟芯片的全流程开发指南。从硬件连接到软件适配,包括引脚复用配置、电源管理优化以及UEFI驱动的深度定制,帮助开发者解决嵌入式系统中的时间同步问题,确保RTC芯片的稳定性和准确性。

weixin_30892037的博客 423

深入解析GEM5 McPAT NoC功耗模型:从arbiter电容计算到微架构关联

本文深入解析GEM5 McPAT NoC功耗模型,重点探讨arbiter电容计算与微架构的关联。通过拆解动态功耗公式和四类电容的物理本质,揭示能量与功率的转换关系,并提供参数调试和模型精度优化的实战技巧,帮助开发者更准确地预测和优化NoC功耗。

weixin_29305313的博客 201

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

使用keycloak实现SSO单点登录(概念、原理、逻辑、详细步骤、难点解释)

野生猿林仔的博客 2万+

【SECS】初识SECS协议

项目标题的第一位和第二位告诉下面有多少字节表示项目的长度。而项目的长度是指项目标题后面的字节数,这里第一个字节就是项目标题。1个字节可以表示的最大长度是0-255,所以只要项目标题后面的字节数小于等于254,都是0x01。

weixin_48618536的博客 1642

YOLOv8【第十章:多任务扩展深度篇·第18节】不规则工业缺陷分割——针对划痕、裂纹的 Seg 模型调优!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 3980

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 为git配置代理
NekoQAQ
博客等级 码龄9年 18粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值