A
Air官方
meson 是 GTK 系全家(GLib、GTK、pango、cairo)钦点的构建系统,GTK 路线的交叉编译绕不开它。这篇讲 meson 交叉编译的配置要点,都是 Air 工程的实操结论。
▍交叉文件
meson 用交叉文件描述目标平台。要点:编译器指向 NDK 的 clang;c 与 cpp 都要给;sysroot 或链接路径指明预编译栈的安装前缀;pkg-config 的查找路径写进环境(pkg_config_path 指向前缀下的 pkgconfig 目录)。交叉文件里指定的属性会覆盖环境变量,两处配置要一致,否则探测结果漂移。
▍依赖探测的驯服
meson 靠依赖定义找库,找不到就报错终止。三种驯法:一是给齐 pkgconfig 文件(预编译栈里都要带),这是最正的路;二是没 pc 文件的库用编译器参数手写依赖定义;三是明确禁用不需要的功能(-D 选项关掉一批可选依赖),探测面越小越稳。可选依赖尤其要处理:默认 auto 会让两台机器编出不同的东西,显式给 enabled 或 disabled,构建可复现。
▍常见错误
一,宿主工具混编:构建过程要在宿主跑的工具(代码生成器)误用了目标编译器,运行即崩——meson 里要用 native 分区声明宿主工具。二,增量失真:手动改了源文件但构建系统时间戳判断没触发,改用显式目标重建。三,静态归档替换陷阱:手动编译的目标文件塞进静态库,必须用归档工具正式替换(thin 归档则直接交给构建系统重建),否则链接器永远拿旧成员。
▍产物布局
统一装进工程私有前缀(或链接到共享栈前缀),库、头文件、pc 文件各归其位,后续工程链接时路径稳定。
▍建议
把交叉文件、环境变量、meson 选项三样固化进工程脚本,任何人任何机器拉下来结果一致,这比任何单次编译技巧都值钱。
免费无广告的安装包可以在官网下载体验。
▍交叉文件
meson 用交叉文件描述目标平台。要点:编译器指向 NDK 的 clang;c 与 cpp 都要给;sysroot 或链接路径指明预编译栈的安装前缀;pkg-config 的查找路径写进环境(pkg_config_path 指向前缀下的 pkgconfig 目录)。交叉文件里指定的属性会覆盖环境变量,两处配置要一致,否则探测结果漂移。
▍依赖探测的驯服
meson 靠依赖定义找库,找不到就报错终止。三种驯法:一是给齐 pkgconfig 文件(预编译栈里都要带),这是最正的路;二是没 pc 文件的库用编译器参数手写依赖定义;三是明确禁用不需要的功能(-D 选项关掉一批可选依赖),探测面越小越稳。可选依赖尤其要处理:默认 auto 会让两台机器编出不同的东西,显式给 enabled 或 disabled,构建可复现。
▍常见错误
一,宿主工具混编:构建过程要在宿主跑的工具(代码生成器)误用了目标编译器,运行即崩——meson 里要用 native 分区声明宿主工具。二,增量失真:手动改了源文件但构建系统时间戳判断没触发,改用显式目标重建。三,静态归档替换陷阱:手动编译的目标文件塞进静态库,必须用归档工具正式替换(thin 归档则直接交给构建系统重建),否则链接器永远拿旧成员。
▍产物布局
统一装进工程私有前缀(或链接到共享栈前缀),库、头文件、pc 文件各归其位,后续工程链接时路径稳定。
▍建议
把交叉文件、环境变量、meson 选项三样固化进工程脚本,任何人任何机器拉下来结果一致,这比任何单次编译技巧都值钱。
免费无广告的安装包可以在官网下载体验。
楼主
7 天前