A
Air官方
waf 构建(Wireshark 一系在用)在桌面移植里偶尔遇到,它的交叉编译有自己的脾气。这篇把要点与差异讲清。
▍waf 的配置面
waf configure 阶段的参数风格与 autotools 相似:编译器、前缀、平台标识都走命令行参数或环境变量。关键点:目标编译器通过环境变量注入(CC、CXX),sysroot 与头文件库路径靠 CFLAGS 与 LDFLAGS 显式给——waf 对 pkg-config 的支持参差,预编译依赖经常要手工喂路径。disable 掉不需要的子系统(文档生成、桌面集成、插件目录)能大幅缩小探测面。
▍真实工程的三条经验
来自抓包分析工程的实操:一,探测脚本按宿主写死的地方要补交叉分支——waf 的自定义检查函数里直接运行测试程序的,交叉下必炸,改成交叉编译加符号检查;二,构建期生成的代码(解析器生成、注册表汇总)要用宿主工具独立构建,与目标产物分目录,混目录会出现构建机跑不了目标二进制的僵局;三,waf 的依赖缓存(.lock-waf 文件族)在参数变化后要清理,否则旧探测结论延续。
▍与其他构建系统的对照
meson 交叉文件集中描述平台,CMake 用 toolchain 文件,autotools 靠命令行与缓存变量,waf 则是环境变量加参数加补丁三件套——没有集中式的交叉描述文件是它的短板,工程化做法是写一个包装脚本:设置环境、注入参数、必要时打构建系统补丁,一步到位。
▍常见错误
一,以为 waf 支持 out-of-tree 直接编:默认构建目录与源码纠缠,交叉参数变化后清目录重来最稳。二,插件装路径:waf 装的运行时加载插件要与应用同包分发,装前缀要与应用的运行时库路径对齐。三,版本漂移:不同版本 waf 参数名有差异,升级上游时构建脚本要跟着审。
▍建议
包装脚本固化全部配置;构建系统层的修改以补丁形式随工程维护,升级上游时补丁族跟着重放。
免费无广告的安装包可以在官网下载体验。
▍waf 的配置面
waf configure 阶段的参数风格与 autotools 相似:编译器、前缀、平台标识都走命令行参数或环境变量。关键点:目标编译器通过环境变量注入(CC、CXX),sysroot 与头文件库路径靠 CFLAGS 与 LDFLAGS 显式给——waf 对 pkg-config 的支持参差,预编译依赖经常要手工喂路径。disable 掉不需要的子系统(文档生成、桌面集成、插件目录)能大幅缩小探测面。
▍真实工程的三条经验
来自抓包分析工程的实操:一,探测脚本按宿主写死的地方要补交叉分支——waf 的自定义检查函数里直接运行测试程序的,交叉下必炸,改成交叉编译加符号检查;二,构建期生成的代码(解析器生成、注册表汇总)要用宿主工具独立构建,与目标产物分目录,混目录会出现构建机跑不了目标二进制的僵局;三,waf 的依赖缓存(.lock-waf 文件族)在参数变化后要清理,否则旧探测结论延续。
▍与其他构建系统的对照
meson 交叉文件集中描述平台,CMake 用 toolchain 文件,autotools 靠命令行与缓存变量,waf 则是环境变量加参数加补丁三件套——没有集中式的交叉描述文件是它的短板,工程化做法是写一个包装脚本:设置环境、注入参数、必要时打构建系统补丁,一步到位。
▍常见错误
一,以为 waf 支持 out-of-tree 直接编:默认构建目录与源码纠缠,交叉参数变化后清目录重来最稳。二,插件装路径:waf 装的运行时加载插件要与应用同包分发,装前缀要与应用的运行时库路径对齐。三,版本漂移:不同版本 waf 参数名有差异,升级上游时构建脚本要跟着审。
▍建议
包装脚本固化全部配置;构建系统层的修改以补丁形式随工程维护,升级上游时补丁族跟着重放。
免费无广告的安装包可以在官网下载体验。
楼主
7 天前