uniapp开发app框架在提升开发效率中的独特优势与应用探索
958
2022-10-04
使用 cmake 来搭建跨平台的应用程序框架:C语言版本
文章目录
一、前言二、示例代码说明
1. 功能描述2. 文件结构3. cmake 构建步骤4. Utils 目录说明5. Application 目录说明
三、Linux 系统下操作步骤
1. 创建构建目录 build2. 执行 cmake,生成 Makefile3. 编译 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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~