VPATH Build不考虑EXTRA_DIST

时间:2014-12-28 20:36:48

标签: c build autotools autoconf automake

我有一个具有以下目录结构的项目(简化):

configure.ac
Makefile.am
samples
src/Makefile.am
tests/openssh_keys
tests/Makefile.am

顶级Makefile.am具有以下内容:

EXTRA_DIST = $(srcdir)/tests/openssh_keys \
             $(srcdir)/samples
SUBDIRS = src . tests

目录' openssh_keys'在'测试'包含单元测试所需的数据。当我创建一个包含' make dist' EXTRA_DIST中提到的所有文件都正确包含在包中。我在使用' make distcheck'因为这会创建一个VPATH Build。不幸的是,EXTRA_DIST中提到的文件没有被复制,导致在运行测试用例时出错。

即使在VPATH Build中,任何人都有适当的解决方案来包含EXTRA_DIST中提到的文件吗?

1 个答案:

答案 0 :(得分:4)

我不确定你收到的错误是什么,因为你没有报告,但我找到your repository并看一看(我建议你去看看你写的是什么在configure.ac,因为它可以简化,但这是一个不同的主题。)

从我在代码中看到的问题是,您实际上并没有为测试二进制文件提供查找文件的路径,而是以CWD相对的方式查找它。但是make distcheck(和许多发行版)使用了$(srcdir)不是.的树外构建,因此它失败了。

EXTRA_DIST不会帮助你:这只会告诉automake复制tarball中的文件,但不会复制$(srcdir)以外的文件。您应该提供测试代码本身,以了解$(srcdir)目录的位置。由于您没有使用测试驱动程序或脚本,我所拥有的最少更改建议将是

pam_openssh_x509_check_CPPFLAGS = -DKEYSDIR="\"$(srcdir)/openssh_keys\""

然后将测试源更改为

    char *directory = KEYSDIR;
    char *oneliner = KEYSDIR "/ssh_rsa.txt";

这样它就会在相对路径(../../tests/openssh_keys)中找到它们。