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

  • 一、前言
  • 二、示例代码说明
  • 三、Linux 系统下操作步骤
  • 四、Widnows 系统下操作步骤
  • 五、总结

一、前言

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

创新互联是一家集网站建设,安义企业网站建设,安义品牌网站建设,网站定制,安义网站建设报价,网络营销,网络优化,安义网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

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

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

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

这篇文章,我们就以一个最简单的程序,来描述如何使用 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

 
 
 
 
  1. $ mkdir build 

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

2. 执行 cmake,生成 Makefile

 
 
 
 
  1. $ cd build 
  2. $ cmake .. 

3. 编译 Utils 库

 
 
 
 
  1. $ cd Utils/src 
  2. $ make 

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

 
 
 
 
  1. $ make install 

4. 编译可执行程序 Application

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

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

 
 
 
 
  1. $ cd build/Application/src 
  2. $ 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 所在的目录下,然后再执行,即可成功。

五、总结

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

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

在公众号后台留言【430】,可以收到示例代码。在 Linux/Windows 系统中可以直接编译、执行,拿来即用。

祝您好运!

标题名称:使用Cmake来搭建跨平台的应用程序框架:C语言版本
本文地址:http://www.shufengxianlan.com/qtweb/news9/263859.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联