automake安装目标进行检查

问题描述:

如何让automake在执行检查脚本之前安装其中一个库?automake安装目标进行检查

该项目为我们动态加载的库之一(通过调用dlopen)建立一个模拟测试库。问题是我们无法覆盖我们的库路径进行测试,因为仍然有许多其他库必须被加载(这些由其他组件安装,而不是由此makefile直接编译)。

如果我可以在检查脚本运行之前简单地安装一些库,它会为我节省很多工作。如果我必须把它放在一个单独的makefile中并且先调用它,那么很好,没问题。基本上我只需要运行make check来做正确的事情。

+0

这种行为会使'make check'做非常错误的事情。你的软件包的'make check'行为与几乎所有其他的'make check'行为不同。从http://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets:“您应该编写自检程序,以便在程序编译但未安装时运行。” –

+0

这只是不可能的这个产品。它__needs__分期将结合几个依赖项目。 –

我找不到任何官方/正确的方式,但以下似乎工作。将一个新的依赖关系添加到check并使用安装库目标,但覆盖安装了哪些库。例如:

check_dummy: lib_LTLIBRARIES = libdummy.la 
check_dummy: install-libLTLIBRARIES 
check: check_dummy 

这个GNU Make具体我相信。

make check目标应该在安装之前对软件包进行测试。 Automake没有办法解决这个问题。这个想法是,如果make check失败,您可能决定根本不安装该软件包。 (另外,如果你砍某种方式对你的规则中make check安装,你可能会打破make distcheck。)

使用前安装的存储库的本地库的常用方法是冠以.:LD_LIBRARY_PATH过程中你的测试值。使用libtool构建本地库并链接到它们将为您处理所有这些可提供的细节:构建树中的可执行文件libtool输出是在调用正确可执行文件(隐藏在其他地方)之前设置这些变量的脚本,以确保它们使用本地库。

如果您还想在安装后执行测试,另一种解决方案是不使用make check,而是使用make installcheck。预计make installcheck仅在用户运行make install后才能运行。你将不得不编写自己的installcheck-local规则。

+0

我们不使用“make install”作为我们的最终包。我们用它来准备可以安装的更多包装。当有多个automake项目和具有不同版本依赖关系的全局库时,'libtool'也无法工作。 –

+0

由于与版本相关的类似原因,我们不能使用LD_LIBRARY_PATH来加载这些库,我们需要一个更有限的路径范围(目前我们只支持一个 - 但显然答案是支持更多)。 –