我有一个具有以下目录结构的项目(简化):
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中提到的文件吗?
答案 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
)中找到它们。