GNU Autotools:如何将源文件包含在根源目录之上的'make dist'tarball中?

时间:2009-12-02 22:11:33

标签: gnu autotools autoconf automake

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

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

2 个答案:

答案 0 :(得分:3)

你可以在subpackage中有一个空目录,称为“common”,带有一个拷贝外部文件的makefile。然后你可以使用dist-hook目标直接将文件移动到“常见的“目录将被压缩到tarball中。这样你就不必担心他们躺在身边并被编辑。您还可以在复制时以“common”覆盖Makefile.am,Makefile.in和Makefile。

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

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

我不是百分百肯定这会起作用。它可能会破坏你的包的其余部分,具体取决于其他所有人希望找到这些源文件的位置;如果你解压缩tarball并试图从那里制造dist,它可能会打破制造dist。你应该知道这种诡计是不受欢迎的。但我希望我已经给你足够的想法来玩。

答案 1 :(得分:2)

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