使用 cmake 来搭建跨平台的应用程序框架:C语言版本

网友投稿 958 2022-10-04

使用 cmake 来搭建跨平台的应用程序框架:C语言版本

使用 cmake 来搭建跨平台的应用程序框架:C语言版本

文章目录

​​一、前言​​​​二、示例代码说明​​

​​1. 功能描述​​​​2. 文件结构​​​​3. cmake 构建步骤​​​​4. Utils 目录说明​​​​5. Application 目录说明​​

​​三、Linux 系统下操作步骤​​

​​1. 创建构建目录 build​​​​2. 执行 cmake,生成 Makefile​​​​3. 编译 Utils 库​​​​4. 编译可执行程序 Application​​

​​四、Widnows 系统下操作步骤​​

​​1. 通过 cmake 指令生成 VS 工程​​​​2. 编译 Utils 库文件​​​​3. 编译可执行程序 Application​​

​​五、总结​​

一、前言

我们在写应用程序的过程中,经常需要面对一个开发场景:编写跨平台的应用程序。

这种要求对于 Linux 系列的平台来说,还是比较好处理的,大部分情况下只需要换一个交叉编译工具链即可,涉及到硬件平台相关部分再嵌入几个内联汇编。

但是,对于 Windows 平台来说,就稍微麻烦一些。你可能会说,在 Windows 平台上用 cygwin, minGW 也可以统一编译啊,但是你能指望客户在安装你的程序时,还需要去部署兼容 Linux 的环境吗?最好的解决方式,还是使用微软自家的开发环境,比如VS等等。

这篇文章,我们以一个最简单的程序,来描述如何使用 cmake 这个构建工具,来组织一个跨平台的应用程序框架。

阅读这篇文章,您可以收获下面几个知识点:

cmake 在编译库文件、应用程序中的相关指令;Windows 系统中的动态库导出、导入写法;如何利用宏定义来进行跨平台编程;

二、示例代码说明

1. 功能描述

示例代码的主要目的,是用来描述如何组织一个跨平台的应用程序结构。它的功能比较简单,如下图所示:

2. 文件结构

Common:放置一些开源的第三方库,例如:网络处理,json 格式解析等等;Application: 应用程序,使用 Utils生成的库;Uitls:放置一些工具、助手函数,例如:文件处理、字符串处理、平台相关的助手函数等等,最后会编译得到库文件(动态库 libUtils.so、静态库 libUtils.a);如果扩展其他模块,可以按照 Utils 的文件结构复制一个即可。

3. cmake 构建步骤

在示例代码根目录下,有一个“总领” CMakeLists.txt 文件,主要用来设置编译器、编译选项,然后去 include 其他文件夹中的 CMakeLists.txt 文件,如下:

4. Utils 目录说明

这个目录的编译输出是库文件:

Linux 系统:libUtils.so, libUtils.a;Windows 系统:libUtils.dll, libUtils.lib, libUtils.a;

其中的 CMakeLists.txt 文件内容如下:

目前,代码中只写了一个最简单的函数 getSystemTimestamp(),在可执行应用程序中,将会调用这个函数。

5. Application 目录说明

这个目录的编译输出是:一个可执行程序,其中调用了 libUtils 库中的函数。

CMakeLists.txt 文件内容如下:

三、Linux 系统下操作步骤

1. 创建构建目录 build

$ mkdir build

在一个独立的 build 目录中编译,生成的中间代码不会污染源代码,这样对于使用 git 等版本管控工具来说非常的方便,在提交的时候只需要 ignore build 目录即可,强烈推荐按照这样的方式来处理。

2. 执行 cmake,生成 Makefile

$ cd build$ cmake ..

3. 编译 Utils 库

$ cd Utils/src$ make

在 CMakeLists.txt 中的最后部分是安装指令,把产生的库文件和头文件,安装到源码中的 install 目录下。

$ make install

4. 编译可执行程序 Application

Application 使用到了 libUtils.so 库,因此需要手动把 libUtils.so 和头文件,复制到 Application 下面对应的 lib/linux 和 include 目录下。

当然,也可以把这个操作写在 Utils 的安装命令里。

$ cd build/Application/src$ make

执行生成的可执行程序 main,即可看到输出结果。

四、Widnows 系统下操作步骤

1. 通过 cmake 指令生成 VS 工程

同样的道理,新建一个 build 目录,然后在其中执行 ​​cmake ..​​ 指令,生成 VS 解决方案,我使用的是 VS2019:

2. 编译 Utils 库文件

使用 VS2019 打开工程文件 DemoApp.sln,在右侧的解决方案中,可以看到:

在 libUtils_shared 单击右键,选择【生成】:

此时,在目录 build\Utils\src\Debug 下面,可以看到生成的文件:

3. 编译可执行程序 Application

因为Application需要使用 Utils 生成的库,因此,需要手动把库和头文件复制到 Application 下面的 lib/win32 和 include 目录下。

在 VS 解决方案窗口中,在 main 目标上,单击右键,选择【生成】:

此时,在目录 build\Application\src\Debug 下可以看到生成的可执行程序:

直接单击 main.exe 执行,报错:

需要把 libUtils.dll 动态库文件复制到 main.exe 所在的目录下,然后再执行,即可成功。

五、总结

这篇文章的操作过程主要以动态库为主,如果编译、使用静态库,执行过程是一样一样的。

如果操作过程有什么问题,欢迎留言、讨论,谢谢!

祝您好运!

---------- End ---------- Hi~你好,我是道哥,一枚嵌入式开发老兵。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序开发可以用什么语言?(小程序开发 什么语言)
下一篇:为Apache安装Perl支持(Windows)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~