lemonboard 发表于 2024-10-19 16:12

《Cmake构建实战》第六章之CMake项目构建

<div class='showpostmsg'> 本帖最后由 lemonboard 于 2024-10-19 17:19 编辑

# 《Cmake构建实战》第六章之CMake项目构建
## 引言
在学习本章之前,我一直以为CMak它就是生成一下makefile文件而已。没有想到CMake居然还负责到这个阶段。看来网上获取的知识终究只是碎片,而成系统,成体系,还是要多读书,读好书!
## CMake项目的生命周期
读到这章时,也发现了自己好久没有关注自己项目的软件生命周期的概念了。CMake在构建项目过程中的6个阶段:配置阶段、生成阶段、构建阶段、安装阶段、打包阶段和程序包安装阶段。
### 前三个阶段
在我的项目中,我经常使用的是前三个阶段,我也就重点分享配置阶段、生成阶段和构建阶段。首先,上张这三个阶段的关系框图:

图:CMake的配置、生成和构建阶段关系框图
阅读本章后,对于CMake的配置和生成阶段才有明确的界限。CMake也是采取“二段式”实现方案。先执行CMak目录程序CMakeLists.txt,完成项目的配置阶段,确定项目构建目标的依赖关系,构建需求等,与选用的具体构建系统的特殊化配置无关,即上图所示中的CMake持久化缓存和CMakeFiles。至少,我是真没有仔细研究过这些中间文件的内容。
之后的生成阶段,CMake再根据具体的目标构建系统(如我们当前的makefile)的要求生成出符合具体构建系统要求格式的具体配置。
貌似现在这种“二段式“的实现方式很流行。反正我在我未来的项目中吼采用了这种设计架构方案。
接下来,我们做一个动手实现,打印一段字符串。
我使用了VScode,并安装了CMake套件插件,所以在输入CMake关键字时有补全提示,特别方便。大家也可尝试一下!



在执行完成CMake后,CMake程序便为我们生成好了makefile文件,再执行一下make命令,gcc也就为我们生成了hello.exe文件。





使用CMake是不是特别方便!
### 后三个阶段
对我平时使用的嵌入式程序开发来说,由于我不存在安装、分发的过程,所以后三个阶段基本用不上。这里也就简单说说这三个阶段:安装阶段、打包阶段和程序包安装阶段。
CMake使用cmake --install命令来安装CMake项目。
```shell
cmake --install . --prefix ../install
```
CMake项目的构建目录,即当前目录".",应为第一个参数;"--prefix"参数用于指定安装目录前缀,即CMake项目安装位置的根目录。
CPack命令会打包当前的构建目录中的CMake项目。
而程序包安装阶段,其实并不属于CMake的内容。
本章节的剩余内容讲了CMake GUI的操作,也没有看出来有多方便来。接下来又讲了CMake内置的命令行工具,看了看,也没有发现有啥方便的地方。

好了!本次分享就到这里吧!下次我们将分享CMake在构建项目时的各种配置与属性的编写。欢迎大家关注EEWORLD,关注我。</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                               
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 《Cmake构建实战》第六章之CMake项目构建