如何在执行检查脚本之前让automake安装其中一个库?
该项目为我们动态加载的一个库(通过调用dlopen
)构建了一个模拟测试库。问题是我们无法覆盖我们的库路径进行测试,因为仍然有许多其他库必须加载(这些库由其他组件安装,而不是由这个makefile直接编译)。
如果我可以在运行检查脚本之前简单地安装一些库,那么这将为我节省很多工作。如果我必须将它放在一个单独的makefile中并先调用它,那么很好,没问题。基本上我只需要运行make check
来做正确的事情。
答案 0 :(得分:4)
make check
目标应该在安装之前测试包。 Automake无法解决这个问题。我们的想法是,如果make check
失败,您可能决定不安装软件包。 (另外,如果您在make check
期间以某种方式破解规则,则可能会中断make distcheck
。)
在安装库之前使用本地库的常用方法是在测试期间将.:
添加到LD_LIBRARY_PATH
的值。使用libtool
构建本地库并链接到它们将为您处理所有这些可重复的详细信息:构建树中的可执行文件libtool
输出是在调用正确的exectutable之前设置这些变量的脚本(隐藏在其他位置) ),以确保他们使用本地库。
另一种解决方案,如果您仍希望在安装后执行测试,则不要使用make check
而是使用make installcheck
。只有在用户运行make installcheck
后,才会运行make install
。您必须编写自己的installcheck-local
规则。
答案 1 :(得分:0)
我找不到任何官方/正确的方式,但以下似乎有效。向check
添加新依赖项并使用安装库目标,但会覆盖安装的库。例如:
check_dummy: lib_LTLIBRARIES = libdummy.la
check_dummy: install-libLTLIBRARIES
check: check_dummy
这个GNU Make具体我相信。