使用 cmake 来搭建跨平台的应用程序框架:C语言版本
一、前言
咱们在写运用程序的进程中,常常需求面临一个开发场景:编写跨途径的运用程序。
这种要求关于 Linux 系列的途径来说,仍是比较好处理的,大部分情况下只需求换一个交叉编译东西链即可,涉及到硬linux重启指令件途径相关部分再嵌入几个内联汇编。
但是,关于 Windows 途径来说,就略微费事一些。你或许会说,在 Windows 途径上json用 cygwin, minGW 也能够一致编译啊,但是你能期望客户在设备你的程序时,还需求去安顿兼开源节流容 Linux 的环境吗?最好的解决办法,仍是运用微软自家的开发环jsonp境,比如VS等等。
这篇文章,咱们以公积金借款一个最简略枸杞的程序,来描绘怎样运用 cmake 这个构建东西,来安排一个龚俊跨途径的运用程序结构Go。
阅读这篇文章,json是什么意思您能够收成下面几个常识点:
cmake 在编译库文件、运用程序中的相关指令;
Windows 体系中的动态库导出、导入写法;
怎样运用宏界说来进行跨途径编程;
在大众号后台留言【430】,能够收到示例代码。在 Linulinux指令x/Windows 体系中能够直接编译、实施,拿来即用。
二、示例代码说linux检查删去文件记录明
1linux是什么操作体系. 功用描绘
示例代码的首开源矿工要目的,是用来描绘怎样安排一个跨途径的运用程序结构。它的功用比较简略,如jsonobject下图所示:
2. 文件结构
Common:放json文件是干什么的置一些开源的第三方库,例如:网络处理,json 格局解析等等;
Application: 运用程序,运用 Utils生成的库;
Uitls:放置一些东西、帮手函数,例如:文件处理、字符串处理、途径相关的帮手函数等等,终究会编译得到库文件(动态json库 libUlinux检查删去文件记录tils.so、静态库 libUtils.a);
假定扩展其他模块,能够按照 Utils 的文件结构仿制一个即可。
3. cmlinux体系ake 构建进程
在示例代码根目录google下,有一个“总领” CMakeLists.txt 文件,首要用来设置编译器、编译选项,然后去 incjson格局lude 其他文件夹中的 CMakeLists.txt 文件,如下:
4. Utils 目录阐明
这个目录的编译输出是库文件:
Linux 系宫颈癌前期症状统:libUtils.so, libUtils.a;
Windows 体系:libUtils.dll, libUtils.ljson字符串ib, libUtils.a;
其间的 CMakeLists.txt 文件内容如下:
现在,代码中只写了一个最简略的函数 getSystemTimestamp(),在可实施运用程序中,将会调用这个函数。
5. Applicationlinux 目录阐明
这个目录的编译输出是:一个可实施程序,其间调枸杞用了 libUtils 库中的函开源代码网站github数。
CMakeLists.txtjsonp 文件内容如下:
三、Linux 体系下操作进程
1. 创立构建目录 build
$ mkdir build
在一个独立的 build 目录中编译,生成的中间代码不会污染源代码,这样关于运用 git 等版甭管控东西来说非常的便当,在提交的时分只需求 ignore build 目录即可,强烈引荐按照这样的办法来处开源矿工理。
2. 实施 cmake,生成 Makefile
$ cd build
$ cmake ..
3. 编译 Utils 库
$ cd Utils/src
$ make
在 C宫崎骏MakeLists.txt 中的终究部分是设备指令,把产生的库文件和头文件,设备到源码中的 install 目录下。
$ make install
4. 编译可实施程序 Application
Application 运用到了 libUtils.so 库,因linux操作体系基础常识而需求手动把 libUtils.so 和头文件,仿制到 Application 下面临应的 lib/linux 和 include 目录下。
当然,也能够把这个操作写在 Utils 的设备指令里。
$ cd build/Application/src
$ make
实施生成的可实施程序 main,即可看到输出成果。
四、Widnows 体系下操作进程
1. 通过 cmake 指令生成 VS 工程
相同的道理,新建一个 build 目录,然后在其间实施 cmake ..
指令,生成 Vlinux重启指令S 解决方案,我运用的是 VS2019:
2. 编译 Utils 库文件
运用 VS2019 打开工程文件 DemoAp架构师p.sln,在右侧的解决方案中,能够看到:
在 libUtils_shared 单击右键,选择【生linux成】:
此刻,在目录 buildUtilssrcDebug 下面,能够看到生成的文件:
3. 编译可实施程序 Application
因为Application需求运用 Utils 生成的库,因而,需求json解析手动把库和头文件仿制到 Application 下面的 lib/win32 和 include 目录下。
在 VS 解决方案窗口中,在 main 目标上,单击右键,选择【生成】:
此刻,在目录 buildApplicationsrcDebug 下能够看到生成的可实施程序:
直接单击 main.exe 实施,报错:
需求把 libUtils.dllinux操作体系基础常识l 动态库文件仿制到 main.exe 地址的目录下,然后再实施,即可成功。
五、总结
这篇文章的操作进程首要以动态库为主,假定编译、运用静态库,实施进程是相同相同的。
假定操作进程有什么问题,欢迎留言、谈论,谢谢!
在大众号后台留言【430】,能够收到示例代码。在 Linux/Windows 体系中能够直接编译、实施,拿来即用。
祝您好运!
———- End ———-
让常识活动起来,越共享,越走运!
星标大众号,能更快找到我!
Hi~你好,我是道哥,一枚嵌入式开发老公积金借款兵。
引荐阅读
1. C言语指针-从底层原理到花式技巧,用图宫崎骏文和代码帮你解说透彻
2. 本来gdb的底层调试原理这么简略
3. 一步步剖析-怎样用C结束面向对象编程
4. 图文剖析:怎样运用LinuxGoogle的pro狗狗币tobuf,来考虑、设计、结束自己的RPC结构
5. 都说软件架构要分层、分模块,详细应该怎样做(一)
6. 都说软件架构要分层、分模块,Linux详细应该怎样做(二json解析)