4

我有一个 Subversion 项目,它使用 Gnu Autotools(即 automake、autoconf 和 libtool)来管理子文件夹(称为“子包”)中的源代码。子包引用子包根源目录之上的源文件,并且对其他子包是通用的。不幸的是,当运行 'make dist' 来创建发行版 tarball 时,公共源文件不会包含在发行版中。

有没有办法在分发源代码之前使用 autoconf/automake 将这些公共源文件移动到子包的子目录中,并让 makefile 自行调整以正确指向重新定位的源文件?显然,可以在编译之前让 makefile 移动这些源文件,但是对于在 Subversion 存储库中工作,这会导致问题,因为这些移动的文件是受修订控制的,并且很容易意外编辑移动的文件而不是原始文件.

4

2 回答 2

3

您可以在子包中有一个空目录,称为“common”,其中包含一个将外部文件复制到其中的 makefile。然后您可以使用 dist-hook 目标将文件直接移动到“common”目录的版本中这将被压缩到压缩包中。这样,您就不必担心它们四处散布并被编辑。您还将在复制时覆盖“common”中的 Makefile.am、Makefile.in 和 Makefile。

subpackage/common/Makefile.am 中的示例(未经测试):

dist-hook:
    cp -p $(top_srcdir)/../common/Makefile* $(top_srcdir)/../common/*.[ch] $(distdir)

我不是 100% 确定这会起作用。它可能会破坏你的包的其余部分,这取决于其他所有东西都希望在哪里找到这些源文件;如果您解压缩 tarball 并尝试从那里制作 dist,它可能会破坏制作 dist。你应该知道这种诡计是不受欢迎的。但我希望我已经给了你足够的想法来玩弄。

于 2009-12-03T18:09:41.410 回答
2

为什么不使用符号链接而不是移动文件(这对我来说总是很可疑)?您可以让您的子包仅引用本地文件,并使用一条Makefile规则说“如果本地文件不在这里,请创建指向父文件的符号链接”。期间make dist,符号链接将自动转换为纯文件。

于 2009-12-09T07:16:27.323 回答