"make dist" 命令如何工作?我被困在一个脚本上,我需要更新它以添加新文件和文件夹

How does "make dist" command work? I'm stuck on a script which I need to update to add new file and folder

我必须向 运行 make dist 命令时创建的 zip 添加一个文件和一个文件夹。这是一个 开源 项目。

经过研究,我知道我必须修改 Makefile.am,但在线示例不起作用或与我当前的 Makefile.am

不匹配

Makefile.am

SUBDIRS = bin data po src extensions docs

DISTCLEANFILES =        \
    intltool-extract    \
    intltool-merge      \
    intltool-update

EXTRA_DIST =                    \
    $(bin_SCRIPTS)      \
    intltool-merge.in       \
    intltool-update.in      \
    intltool-extract.in

DISTCHECK_CONFIGURE_FLAGS = --disable-update-mimedb

check-po:
    @for i in $(top_srcdir)/po/*.po ; do \
        if ! grep -q ^`basename $$i | \
        sed 's,.po,,'`$$ $(top_srcdir)/po/LINGUAS ; then \
            echo '***' `basename $$i | \
            sed 's,.po,,'` missing from po/LINGUAS '***' ; \
            exit 1; \
        fi; \
    done;

lint:
    flake8 --ignore E402 $(top_srcdir)/src $(top_srcdir)/extensions

test: lint check-po
    PYTHONPATH=$(pkgdatadir)/extensions:$(PYTHONPATH) \
    python -m sugar3.test.discover $(top_srcdir)/tests

configure.ac

AC_INIT([Sugar],[0.114],[],[sugar])

AC_PREREQ([2.59])

AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([configure.ac])

SUCROSE_VERSION="0.114"
AC_SUBST(SUCROSE_VERSION)

AM_INIT_AUTOMAKE([1.9 foreign dist-xz no-dist-gzip])

AM_MAINTAINER_MODE

PYTHON=python2
AM_PATH_PYTHON

AC_PATH_PROG([EMPY], [empy])
if test -z "$EMPY"; then
    AC_MSG_ERROR([python-empy is required])
fi

PKG_CHECK_MODULES(SHELL, gtk+-3.0)

IT_PROG_INTLTOOL([0.35.0])
GETTEXT_PACKAGE=sugar
AC_SUBST([GETTEXT_PACKAGE])
AM_GLIB_GNU_GETTEXT

AC_ARG_ENABLE(update-mimedb,
   AC_HELP_STRING([--disable-update-mimedb],
                   [disable the update-mime-database after install [default=no]]),,
    enable_update_mimedb=yes)
AM_CONDITIONAL(ENABLE_UPDATE_MIMEDB, test x$enable_update_mimedb = xyes)

GLIB_GSETTINGS


AC_CONFIG_FILES([
bin/Makefile
bin/sugar
data/icons/Makefile
data/Makefile
extensions/cpsection/aboutcomputer/Makefile
extensions/cpsection/aboutme/Makefile
extensions/cpsection/background/Makefile
extensions/cpsection/backup/Makefile
extensions/cpsection/backup/backends/Makefile
extensions/cpsection/datetime/Makefile
extensions/cpsection/frame/Makefile
extensions/cpsection/keyboard/Makefile
extensions/cpsection/language/Makefile
extensions/cpsection/modemconfiguration/Makefile
extensions/cpsection/Makefile
extensions/cpsection/network/Makefile
extensions/cpsection/power/Makefile
extensions/cpsection/updater/Makefile
extensions/cpsection/webaccount/services/Makefile
extensions/cpsection/webaccount/Makefile
extensions/deviceicon/Makefile
extensions/globalkey/Makefile
extensions/webservice/Makefile
extensions/Makefile
Makefile
po/Makefile.in
src/jarabe/config.py
src/jarabe/controlpanel/Makefile
src/jarabe/desktop/Makefile
src/jarabe/frame/Makefile
src/jarabe/intro/Makefile
src/jarabe/journal/Makefile
src/jarabe/Makefile
src/jarabe/model/Makefile
src/jarabe/model/update/Makefile
src/jarabe/util/Makefile
src/jarabe/util/telepathy/Makefile
src/jarabe/view/Makefile
src/jarabe/webservice/Makefile
src/Makefile
])

AC_OUTPUT

当我 运行 命令 make dist 时,输出 zip 不包含我现在需要添加的文件和文件夹。我无法理解我应该在代码中的什么地方进行更改(Makefile.am 或 configure.ac)。

EXTRA_DIST 变量听起来很像。

I've to add a file and a folder to the zip that is created when I run make dist command.

我认为这些尚未包含在发行版中。如果您不确定,请检查 -- Automake-based 像您这样的构建系统会自动识别大量文件以包含在分发包中。

假设尚未包含这些文件,有几种方法可以使它们包含在内。最简单的方法是将它们添加到 EXTRA_DIST 变量中,得到

EXTRA_DIST =                \
    $(bin_SCRIPTS)          \
    intltool-merge.in       \
    intltool-update.in      \
    intltool-extract.in     \
    a_directory             \
    some_file.ext

如果您继续使用多行形式(我喜欢这种形式,因为我发现它更易于阅读),请不要忘记结尾的反斜杠。您可以指定文件路径、目录或两者。请注意,在目录的情况下,它不仅是目录本身,而且它的所有内容,递归地,都包含在分发中。这都记录在案 in the manual.

如果你需要更精细的控制,那么还有一个扩展点,用于管理分布的内容,形式为the "dist hook"。这包括一个名为 dist-hookmake 目标。与您 Makefile.am 中的任何其他文字 make 规则一样,您为构建该目标提供的任何规则都会被复制到最终生成的 Makefile,如果存在这样的规则,则其配方是 运行 作为构建分发的一部分,在以其他方式填充分发目录之后但在构建存档文件之前。您可以在该目标的配方中编写或多或少的任意 shell 代码来调整分布。按照上面的 link 到文档以获取详细信息。