You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Autotools中运行make dist时修改tar包格式

解决Autotools make dist 路径过长及tar o选项问题

问题

使用GNU Autotools构建C++项目时,make dist默认生成gnu格式tar包,该格式限制路径长度不超过99字符,导致部分长路径文件无法被正确打包。尝试通过TAR='tar --format=pax' make dist指定pax格式失败,原因是Autotools生成的tar命令包含o选项(对应--old-archive,强制v7格式),且参数顺序错误,触发tar报错:

tar: You must specify one of the '-Acdtrux', '--delete' or '--test-label' options

解决方案

1. 通过AM_INIT_AUTOMAKE移除o选项

在项目根目录的configure.ac文件中,修改AM_INIT_AUTOMAKE的初始化参数,添加tar-ustar选项:

AM_INIT_AUTOMAKE([tar-ustar])

执行以下命令更新配置文件:

autoreconf -vfi

之后再运行make dist,tar命令会自动去掉o选项,变为tar chf - target,此时可以正常通过TAR='tar --format=pax' make dist指定pax格式。

2. 自定义tar包装脚本(适配低版本Autotools)

如果无法修改configure.ac或Autotools版本较低,可创建一个shell脚本调整参数顺序:
创建mytar.sh:

#!/bin/sh
# 跳过前4个参数,将格式参数追加到末尾
shift 4
exec tar chf - "$@" --format=pax

赋予执行权限:

chmod +x mytar.sh

执行make dist时指定该脚本:

TAR='./mytar.sh' make dist

3. 直接设置DIST_ARCHIVE_FORMAT(Autotools 1.16+)

若你的Autotools版本≥1.16,无需手动调整tar参数,直接设置环境变量指定格式:

DIST_ARCHIVE_FORMAT=pax make dist

该变量会让Autotools自动使用pax格式生成tar包,自动处理路径长度问题。

验证

生成tar包后,可通过以下命令确认格式:

tar -tf your-project.tar.gz --format=pax

若能正常列出所有文件且无报错,说明配置生效。

内容的提问来源于stack exchange,提问作者Timothy Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:45:08