温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Cmake来搭建跨平台的应用程序框架

发布时间:2021-10-14 15:32:56 来源:亿速云 阅读:102 作者:iii 栏目:编程语言

这篇文章主要介绍“如何使用Cmake来搭建跨平台的应用程序框架”,在日常操作中,相信很多人在如何使用Cmake来搭建跨平台的应用程序框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Cmake来搭建跨平台的应用程序框架”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、前言

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

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

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

之前,我曾经在 B 站上传一个类似的小视频,用 C++ 来写一个跨平台的应用程序结构。后来有小伙伴希望提供一个 C 语言版本的,于是有了这篇文章。

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

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

cmake 在编译库文件、应用程序中的相关指令;

Windows 系统中的动态库导出、导入写法;

如何利用宏定义来进行跨平台编程;

二、示例代码说明

1. 功能描述

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

如何使用Cmake来搭建跨平台的应用程序框架

2. 文件结构

如何使用Cmake来搭建跨平台的应用程序框架

  • Common:放置一些开源的第三方库,例如:网络处理,json 格式解析等等;

  • Application: 应用程序,使用 Utils生成的库;

  • Uitls:放置一些工具、助手函数,例如:文件处理、字符串处理、平台相关的助手函数等等,最后会编译得到库文件(动态库 libUtils.so、静态库  libUtils.a);

  • 如果扩展其他模块,可以按照 Utils 的文件结构复制一个即可。

3. cmake 构建步骤

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

如何使用Cmake来搭建跨平台的应用程序框架

4. Utils 目录说明

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

Linux 系统:libUtils.so, libUtils.a;

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

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

如何使用Cmake来搭建跨平台的应用程序框架

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

5. Application 目录说明

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

CMakeLists.txt 文件内容如下:

如何使用Cmake来搭建跨平台的应用程序框架

三、Linux 系统下操作步骤

1. 创建构建目录 build

$ mkdir build

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

2. 执行 cmake,生成 Makefile

$ cd build $ cmake ..

如何使用Cmake来搭建跨平台的应用程序框架

3. 编译 Utils 库

$ cd Utils/src $ make

如何使用Cmake来搭建跨平台的应用程序框架

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

$ make install

如何使用Cmake来搭建跨平台的应用程序框架

4. 编译可执行程序 Application

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

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

$ cd build/Application/src $ make

如何使用Cmake来搭建跨平台的应用程序框架

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

四、Widnows 系统下操作步骤

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

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

如何使用Cmake来搭建跨平台的应用程序框架

如何使用Cmake来搭建跨平台的应用程序框架

2. 编译 Utils 库文件

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

如何使用Cmake来搭建跨平台的应用程序框架

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

如何使用Cmake来搭建跨平台的应用程序框架

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

如何使用Cmake来搭建跨平台的应用程序框架

3. 编译可执行程序 Application

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

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

如何使用Cmake来搭建跨平台的应用程序框架

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

如何使用Cmake来搭建跨平台的应用程序框架

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

如何使用Cmake来搭建跨平台的应用程序框架

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

如何使用Cmake来搭建跨平台的应用程序框架

到此,关于“如何使用Cmake来搭建跨平台的应用程序框架”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI