我们在写应用程序的过程中,经常需要面对一个开发场景:编写跨平台的应用程序。
创新互联是一家集网站建设,安义企业网站建设,安义品牌网站建设,网站定制,安义网站建设报价,网络营销,网络优化,安义网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
这种要求对于 Linux 系列的平台来说,还是比较好处理的,大部分情况下只需要换一个交叉编译工具链即可,涉及到硬件平台相关部分再嵌入几个内联汇编。
但是,对于 Windows 平台来说,就稍微麻烦一些。你可能会说,在 Windows 平台上用 cygwin, minGW 也可以统一编译啊,但是你能指望客户在安装你的程序时,还需要去部署兼容 Linux 的环境吗?最好的解决方式,还是使用微软自家的开发环境,比如VS等等。
之前,我曾经在 B 站上传一个类似的小视频,用 C++ 来写一个跨平台的应用程序结构。后来有小伙伴希望提供一个 C 语言版本的,于是有了这篇文章。
这篇文章,我们就以一个最简单的程序,来描述如何使用 cmake 这个构建工具,来组织一个跨平台的应用程序框架。
阅读这篇文章,您可以收获下面几个知识点:
cmake 在编译库文件、应用程序中的相关指令;
Windows 系统中的动态库导出、导入写法;
如何利用宏定义来进行跨平台编程;
示例代码的主要目的,是用来描述如何组织一个跨平台的应用程序结构。它的功能比较简单,如下图所示:
在示例代码根目录下,有一个“总领” CMakeLists.txt 文件,主要用来设置编译器、编译选项,然后去 include 其他文件夹中的 CMakeLists.txt 文件,如下:
这个目录的编译输出是库文件:
Linux 系统:libUtils.so, libUtils.a;
Windows 系统:libUtils.dll, libUtils.lib, libUtils.a;
其中的 CMakeLists.txt 文件内容如下:
目前,代码中只写了一个最简单的函数 getSystemTimestamp(),在可执行应用程序中,将会调用这个函数。
这个目录的编译输出是:一个可执行程序,其中调用了 libUtils 库中的函数。
CMakeLists.txt 文件内容如下:
- $ mkdir build
在一个独立的 build 目录中编译,生成的中间代码不会污染源代码,这样对于使用 git 等版本管控工具来说非常的方便,在提交的时候只需要 ignore build 目录即可,强烈推荐按照这样的方式来处理。
- $ cd build
- $ cmake ..
- $ cd Utils/src
- $ make
在 CMakeLists.txt 中的最后部分是安装指令,把产生的库文件和头文件,安装到源码中的 install 目录下。
- $ make install
Application 使用到了 libUtils.so 库,因此需要手动把 libUtils.so 和头文件,复制到 Application 下面对应的 lib/linux 和 include 目录下。
当然,也可以把这个操作写在 Utils 的安装命令里。
- $ cd build/Application/src
- $ make
执行生成的可执行程序 main,即可看到输出结果。
同样的道理,新建一个 build 目录,然后在其中执行 cmake .. 指令,生成 VS 解决方案,我使用的是 VS2019:
使用 VS2019 打开工程文件 DemoApp.sln,在右侧的解决方案中,可以看到:
在 libUtils_shared 单击右键,选择【生成】:
此时,在目录 build\Utils\src\Debug 下面,可以看到生成的文件:
因为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。内容未经允许不得转载,或转载时需注明来源: 创新互联