cmake超详细入门教程

https://blog.csdn.net/qq_43257914/article/details/128409831

文章目录


前言

我们在平时编译代码的时,面对简单的代码,直接GCC编译就好,稍微多一点,可以编写Makefile来编译,以上编译起来都很轻松,可是平时工作的时候基本都是大工程呀,代码文件少则几十个文件了,这种情况下就头疼了,咋办呢?今天我来教你使用cmake轻松解决问题~


提示:以下是本篇文章正文内容,下面案例可供参考

一、cmake是什么?

Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C++的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。

不同的IDE所集成的make工具所遵循的规范和标准都不同,也就导致其语法、格式不同,也就不能很好的跨平台编译,会再次使得工作繁琐起来

那么cmake为了解决这个问题而诞生了,其允许开发者指定整个工程的编译流程,在根据编译平台,生成本地化的Makefile和工程文件,最后用户只需make编译即可

简而言之,可以把cmake看成一款自动生成 Makefile的工具,所以编译流程就变成了:cmake—>make–>用户代码–>可执行文件

在这里插入图片描述

二、动手写一个简单的cmake

1.安装cmake

首先需要手动安装cmake

sudo apt-get install cmake
  • 1

2.cmake编译单个源文件

我们首先编写一个经典的 “hello world” 代码

在这里插入图片描述
然后编写 CMakeLists.txt 文件,这个文件会被 cmake 工具解析,可以类比与 Makefile 被 make 解析一样

写下以下内容:

在这里插入图片描述
此时,当前文件夹下有连个文件:
在这里插入图片描述
执行cmake 进行编译

cmake ./
  • 1

打印结果如下:
在这里插入图片描述
然后会生成这些文件

在这里插入图片描述
到这里,我们直接执行make编译代码就好

在这里插入图片描述
然后你会发现,已经生成了可执行文件 hello

在这里插入图片描述
运行可执行文件成功,也意味着我们已经学会了如何基础的使用 cmake 工具了

在这里插入图片描述

三、CMakeLixts.txt文件基本语法

刚刚我们已经自己动手写了一个CMakeLists.txt 文件,并已经成功的编译出了可执行文件,但是你肯定还是处于一种似懂非懂的状态,所以,在这里我们稍微讲下他的语法结构

回到刚刚写的 CMakeLists.txt 文件,我们了解一下他的意思

在这里插入图片描述
第一行 project(HELLO):

project 命令用于设置工程的名称,括号中的参数 HELLO 便是我们要设置的工程名称;设置工程名称并
不是强制性的,但是最好加上。

第二行 add_executable(hello ./main.c):

add_executable 同样也是一个命令,用于生成一个可执行文件,
在本例中传入了两个参数,第一个参数表示生成的可执行文件对应的文件名,第二个参数表示对应的源文件;

所以 add_executable(hello ./main.c)表示需要生成一个名为 hello 的可执行文件,所需源文件为当前目录下的 main.c。

四、如何将编译文件与源文件分离

之前我们编译完代码后,会发现编译构建过程产生的文件与我们的源文件混杂在一起了

在这里插入图片描述

这样看起来会很不舒服,因此我们可以使用以下方法进行分离

首先,我们把之前构造过程产生的文件都删了,变成这样

在这里插入图片描述
新建一个 build 目录,进入目录,执行 cmake …/ , 然后执行 make 编译

在这里插入图片描述

可以看到,cmake 和 make 生成的构建文件,以及可执行文件,都保存在了build目录下
在这里插入图片描述
如果要清理工程,直接删除 build 目录即可,这样看起来使得工程文件更加整洁

五、使用 cmake 编译多个源文件

在之前的基础上,我们新建两个文件,hello.c 、hello.h

hello.c
在这里插入图片描述
hello.h
在这里插入图片描述
因为添加了新的源文件,因此还需要修改 CMakeLists.txt 文件

我们定义了一个 SRC_LIST 变量,SRC_LIST 变量是一个源文件列表,记录生
成可执行文件 hello 所需的源文件 main.c 和 hello.c

在 add_executable 命令引用了该变量

当然也可以不去定义这个变量而直接写入源文件,这样做是为了代码整洁,以后文件多了可以这样操作
在这里插入图片描述
现在的目录结构是这样:

在这里插入图片描述

接下来的环节和之前一样,进入到build目录下,cmake ,最后make 编译出可执行文件

在这里插入图片描述

六、使用 cmake 生成库文件

在我们平时的开发过程中,也有很多场景需要将我们的源码编译成库文件来提供使用,这个需求也可以使用cmake做到,

这就需要用到一条命令:

add_library(libhello 静态/动态库 hello.c)

没设置参数的话,默认就是生成静态库文件,可以加参数,设置指定的库文件

add_library(libhello SHARED hello.c) #生成动态库文件
add_library(libhello STATIC hello.c) #生成静态库文件

修改生成的库文件名字

可以看到刚刚的库文件名: liblibhello.a ,非常不优雅
那么我们可以使用这条命令来进行库文件的设置

set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
  • 1

set_target_properties 用于设置目标 的属性,这里通 过 set_target_properties 命令 对 libhello 目标 的
OUTPUT_NAME 属性进行了设置,将其设置为 hello。

在这里插入图片描述

同样的操作,进入build目录 ,进行以下操作,我们就得到了hello的动态库:libhello.so

在这里插入图片描述


总结

关于cmake的使用方法还有很多,这里只是做了一个最基本的介绍,后期有机会在进行详细补充~

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CMake是一个跨平台的自动化构建工具,可以生成Makefile、Visual Studio的Solution或Xcode的project等工具所需的文件。其语法简单易懂,可实现高效的工程建造和配置管理。CMake详细教程PDF是一份非常有用的CMake教程资料,可以帮助初学者快速掌握CMake的使用方法。该PDF文件包含了CMake教程的各个方面,包括从CMake的基本使用到高级主题,以及如何使用CMake构建各种软件项目。 CMake详细教程PDF首先介绍了CMake的基本命令和语法,例如如何定义变量、如何包含文件和库以及如何生成可执行文件。其后详细讲解了如何使用CMake来构建不同类型的项目,包括C/C++项目、Qt项目和Python项目等。此外,该教程PDF还涵盖了如何配置CMake以构建库、如何使用CMake集成第三方库以及如何使用CMake来封装源代码库等高级主题。 CMake详细教程PDF的好处在于它提供了一种交互式学习方法,结合代码示例和命令说明,深入浅出地解释了CMake的每个功能和用法。使用该教程可以帮助开发人员快速掌握CMake的使用方法,进而提高开发效率和项目管理能力。 ### 回答2: CMake是一种跨平台的自动化编译工具,可以实现快速创建和管理多个操作系统和编译器下的项目。作为一种开源的工具,CMake使用一种统一的语言去描述构建过程,可以生成多种编译系统的构建文件,使用CMake可以大幅简化跨平台编译问题。 CMake详细教程pdf是一份介绍CMake工具的学习资料,内容涵盖了CMake的基本语法、用法、常用命令等内容。教程主要分为三个部分,第一部分介绍了CMake的概念和基本语法,包括如何编写CMakeLists.txt文件、如何使用变量和函数,以及如何编写配置文件等。第二部分讲解了CMake的常用命令,包括如何设置项目属性、如何编译和安装项目,以及如何添加第三方库等。第三部分是实践案例,通过一个简单的示例项目介绍了CMake的应用。 CMake详细教程pdf帮助用户深入了解CMake工具的使用方法,提供了丰富的实践案例,可以帮助用户快速掌握CMake的工作原理和使用技巧。无论是开发新项目还是维护已有项目,都可以利用CMake详细教程pdf提供的知识来更加高效的完成开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值