如何排除 dist-gzip / dist-zip 的特定目录?

How to exclude specific directories for dist-gzip / dist-zip?

背景: Automake 提供不同的 types of distributions. After reading the docs "What Goes in a Distribution" 我知道如何 包含 额外的目录 一般 。但我不确定最好的方法排除 此列表中的目录单个规则

这是当前 configure.ac 中添加到 dist 目录的部分

AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([build_aux])

这是当前 Makefile.am 中添加到 dist 目录的部分

SUBDIRS = sources po doc tests
EXTRA_DIST = build_windows

此外Makefile.am

AUTOMAKE_OPTIONS = dist-zip

用于启用 zip 分发。

结果package.tar.gzpackage.zip内容相同。因此包括以下目录:

问题: 如何在 package.tar.gz 排除 build_windows 并在 package.zip 中排除 m4

简而言之,你不会。不同类型的发行版只是格式不同,但这些发行版的内容设计得完全一样。

长答案:

Different types of distributions only mean different format, but the content of these is designed to be exactly the same.

因此目标的解决方案是:

  • EXTRA_DIST 中删除 build_windows 因为在 tar.gz 分发
  • 中只有需要的内容
  • AUTOMAKE_OPTIONS 中删除 dist-zip 以防止自动生成 package.zip
  • 手动添加(或在本例中为编辑)dist-hook 规则:
    • 检查 build_windows 是否存在(如果从 package.tar.gz 构建则不存在)
    • 将 dist 内容复制到临时目录
    • remove/add files/folders 有需要的
    • 从此文件夹创建一个 package_win.zip(使用不同的名称以防止可能的 package.zip 覆盖文件)

编辑:从手动创建的 dist 文件夹中删除任何内容都会破坏 make dist(或至少 make distcheck),因此这只是一个好主意如果你想删除与 autoconf/automake/Makfiles 相关的所有内容