千家信息网

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

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,这篇文章主要介绍"如何使用Cmake来搭建跨平台的应用程序框架",在日常操作中,相信很多人在如何使用Cmake来搭建跨平台的应用程序框架问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2024年11月28日如何使用Cmake来搭建跨平台的应用程序框架

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

一、前言

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

这种要求对于 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

$ 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 所在的目录下,然后再执行,即可成功。

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

程序 目录 文件 编译 应用程序 应用 生成 库文件 框架 代码 函数 平台 系统 处理 工具 指令 篇文章 结构 学习 动态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中职软件开发专业课程 浪潮软件有网络安全概念吗 海安选择网络技术排名靠前 网络安全等保制度制定 软件开发好怎么运作 耳机音频软件开发学什么 湖南服务管理软件开发 网络安全及智能 木鱼我的世界基岩版服务器 数据库怎么新建服务器组 列举五种网络安全的主要威胁 绵阳中专软件开发学校 天津教育系统网络安全平台 医院管理系统软件服务器 上海创智网络技术公司 我的世界手游服务器 珠海通讯软件开发价目表 数据库 物理优化方法 服务佳的定制软件开发 速达3g服务器win10 毕业设计作品网站计算机网络技术 河北数据库安全箱代理商 重庆高新区互联网科技 网络安全协会个人简介 天津品质软件开发设施价格优惠 天津gps时钟服务器虚拟主机 如何构建解磷功能基因数据库 计划任务管理服务器 报告系统软件开发 泉州如何利用社交软件开发客户
0