侵权投诉
订阅
纠错
加入自媒体

分享一个适合【团队】开发的cmake【跨平台】工程模板

2022-11-21 11:48
道哥分享
关注

目录

· 文件目录说明

· 操作:Linux系统下编译

    · 编译动态库

    · 编译、运行可执行文件

· Windows系统中使用VSCode开发

    · 创建MSVC工程

    · 执行cmake配置

    · 编译动态库

    · 编译、运行可执行程序

· Windows只用VS2019来开发

    · 生成VS2019解决方案

    · 使用VS2019编译动态库

    · 编译、运行可执行程序

别人的经验,我们的阶梯!

之前分享过一篇关于 cmake 的入门文章:《使用 cmake 来搭建跨平台的应用程序框架:C语言版本》,那篇文章重点是描述如何利用 cmake  来编译或者构建跨平台的工程,并没有涉及到团队协作开发方面的内容。

这篇文章提供了一个简洁易懂的 cmake 工程模板,可以满足一个小团队的合作开发,无论是在代码安全性,还是开发效率上,都能满足基本的开发需求。

本文详细描述了文件结构和操作流程,如何在Linux系统使用命令行来编译,如何在Windows系统中使用VSCode 和Visual Studio 2019来进行开发和编译。

使用这个cmake模板之后,代码的结构非常的清晰,编译过程中产生的中间文件也不会污染源代码。

无论是开发一些个人项目,或者是在一些小团队中使用是绰绰有余了。

示例代码中核心的两个文件就是:app.cmake和lib.cmake,几乎每一行都有注释。

文末有下载链接。

文件目录说明

在团队开发工作中,每个人负责不同的模块。

从代码保密的角度看,除了项目负责人(或者说项目整合人员)有权限获取一个项目中的所有代码之外,每个开发者通常只拥有自己负责的模块。

每个开发者在编译自己的模块时,需要把输出文件(头文件、库文件、文档)等,汇总到一个中央仓库中,方便整合人员进行集成编译。

因此,示例代码如下图所示:

CMakeLists.txt:是最外层的 cmake 文件;

install:是所有模块编译结果的安装目录,便于项目整合人员集成编译;

myapp:是一个可执行程序的模板;

mymath:是一个动态链接库的模板;

再来看一下mymath内部的文件组织结构:

build:存放编译过程中产生的中间文件,不会污染源代码。当然了,如果使用 git 来进行版本管理,需要把这个目录添加到 .gitignore 文件中;

lib.cmake:比较重要的 cmake 文件,这个模板的核心价值就在这个文件中;

source:存放源代码,并且区分了 linux 和 windows 系统,在不同的系统上编译,会自动编译对应目录下的 C 文件;

include:存放头文件;

myapp目录内部结构与mymath几乎是一样的,这里就不赘述了。

这两个模块的编译结果会自动输出到install目录,如下图所示:

在install目录内:

include:汇总了所有模块的头文件;

library:汇总了所有模块输出的库文件;

bin:汇总了所有的可执行程序(一些单元测试程序根据自己的需要是否输出此目录);

【本文作者】公-众-号:“IOT物联网小镇”,是道哥在工作之余个人维护的分享平台,十多年的嵌入式开发老兵,专注于嵌入式 + Linux 领域,玩过单片机、搞过智能家居、研究过 PLC 和 工业机器人。厚积薄发、换位思考,以读者的角度来总结文章。每一篇输出,不仅仅是干货的呈现,更是引导你一步一步的深入思考,从底层逻辑来提升自己。

操作:Linux系统下编译

编译动态库

删除install下所有文件和目录,得到一个干净的目录。

创建build目录,存放中间文件:

$ cd demo_cmakemymath

$ mkdir build

编译

$ cd build

$ cmake ..

$ make

成功编译后,在install目录里可以看到编译的输出结果:

demo_cmakeinstallincludemymathmymath.h

demo_cmakeinstalllibrarylinuxdebuglibmymath.so

编译可执行文件

$ cd demo_cmakemyapp

$ mkdir build

$ cd build

$ cmake ..

$ make

查看install目录下的输出结果:

demo_cmakeinstallinlinuxdebugmyapp

运行可执行程序

$ cd demo_cmakeinstallinlinuxdebug

$ ./myapp

执行结果如下图:

Windows系统中使用VSCode开发

创建MSVC工程

在VSCode IDE中,通过菜单【File】-【Open Folder】,打开文件夹demo_cmake。

因为demo_cmake目录下存在一个顶层CMakeLists.txt文件,所以VSCode侦测到之后会自动进行cmake配置,同时会创建目录build来存放所有的中间文件。

有些VSCode版本会跳出一个提示窗,让用户选择进行cmake配置,如下一步中所示。

执行cmake配置

可以同时按下:【ctrl】 + 【shift】 + 【p】,重新进行cmake配置:

编译动态库

同时按下【shift】+【F7】,(或者按下VSCode最下方 【Build】右侧的编译目标),弹出窗口:

查看install目录中的输出文件:

demo_cmakeinstalllibrarywindowsdebugmymath.lib
demo_cmakeinstallinwindowsdebugmymath.dll

编译可执行程序

同时按下【shift】+【F7】,选择编译myapp。

查看install目录:

demo_cmakeinstallinwindowsdebugmyapp

双击运行可执行程序

Windows只用VS2019来开发 生成VS2019解决方案

打开命令行窗口:  x64 Native Tools Command Prompt for VS 2019

> cd demo_cmake

> md build

> cd build

> cmake ..

输出如图:

使用VS2019编译动态库

此时,可以看到解决方案:demo_cmakeuilddemo_cmake.sln。

使用VS2019打开解决方案文件:

在工程mymath上单击右键,选择【重新生成】,在输出信息区可以看到生成了文件:

demo_cmakeinstalllibrarywindowsdebugmymath.lib

demo_cmakeinstallinwindowsdebugmymath.dll

编译可执行程序

在工程myapp上单击右键,选择【重新生成】。

在输出信息区可以看到生成了文件:

demo_cmakeinstallinwindowsdebugmyapp.exe

运行可执行程序

------ End ------

       原文标题 : 分享一个适合【团队】开发的cmake【跨平台】工程模板

声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

物联网 猎头职位 更多
扫码关注公众号
OFweek物联网
获取更多精彩内容
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号