第三方代码库的移植编译
通过之前的实验,我们已经基本学习了解了 xmake.lua 的配置语法,也学习了如何通过这个文件配置构建 C/C++ 项目。因此,在本节实验中,我们通过实战的方式,以一个实际的第三方开源基础库 libjpeg 为例,讲解如何通过使用 xmake 去对它进行移植和编译。
libjpeg 是一个用于 jpeg 图片文件解码的开源基础库,其代码本身是完全跨平台的,但是其内部的构建系统却非常的混乱,有提供对于 Linux 系统的 autotools,也有对于 msvc 编译器的 bat 构建脚本。不同的平台,构建方式差异很大,大家如果想编译不同平台的库,都需要花上一定的时间去研究各种平台下对 libjpeg 的编译过程。
而使用 xmake 就可以进一步简化对于这个库的编译,并且还提供了如何去快速集成的方法。不过,在实际的讲解前,我们还需要先从官网下载 libjpeg 的源码,并通过 tar 命令解压到 jpeg-9d 目录下。
整个下载和解压过程如下。
cd ~/Code
wget http://www.ijg.org/files/jpegsrc.v9d.tar.gz
tar -xvf jpegsrc.v9d.tar.gz
使用 xmake 调用 autotools 直接编译
解压完成后,执行 ls 先看下这个项目的根目录下有哪些跟构建系统相关的文件,我们发现,libjpeg 其实存在 ./configure 配置脚本,这是 autotools 构建工具的主要配置工具。这就说明 libjpeg 其实可以直接用 autotools 来编译的,只不过 autotools 并不支持 windows 以及 msvc 编译器。
既然存在 ./configure,那么 xmake 也可以直接调用它来完成整个项目的构建,例如执行下面的命令。
$ cd jpeg-9d
$ xmake
note: configure found, try building it or you can run `xmake f --trybuild=` to set buildsystem (pass -y or --confirm=y/n/d to skip confirm)?
please input: y (y/n)
只需要执行一个 xmake 命令,xmake 就能自动探测当前的项目支持哪些构建系统,如果有 xmake.lua 文件,那就直接按 xmake 的配置编译,如果有 ./configure 那就提示用户是否使用 autotools 构建系统去常识性编译它(另外 xmake 还支持 cmake、meson 等构建系统文件的探测和尝试编译)。
看到下图提示后,我们可以按 y 或者默认回车,来告诉 xmake 请尝试直接调用 autotools 来编译它。
编译成功完成后,xmake 会把构建生成产物放置在 build/artifacts 目录下,实际输出内容,如下图。
自动生成 xmake.lua 移植编译 libjpeg
刚刚我们介绍了使用 xmake 直接去调用 autotools 来编译,但这种方式毕竟依赖第三方的构建系统,有很多局限性,比如 autotools 不支持 windows,那就无法做到跨平台编译了。
这个时候,我们可以考虑将 libjpeg 的所有源码移植到 xmake.lua 的配置文件中,然后利用 xmake 内部的构建系统直接去编译它,这样就能做到一次移植,多平台编译支持。
不过从现有的构建系统移植到 xmake.lua 还是比较费体力的,为此 xmake 提供了一个辅助功能,它可以扫描当前目录下的所有源代码,然后自动帮我们生成一个基本可用的 xmake.lua 出来,当然自动生成的配置文件,多少会存在一些小问题,但既然有个范本,我们在上面做些小改动调整,就能完成整个构建移植工作。相比起完全手动配置还是省事不少的。
为了启用 xmake 的自动扫描特性,首先得确保当前目录下没有其它的第三方构建系统文件,否则 x

本文详细指导了如何使用xmake移植开源库libjpeg,包括直接调用autotools、自动生成xmake.lua配置和远程包依赖集成,以提升编译效率和跨平台支持。
1168

被折叠的 条评论
为什么被折叠?



