automake安装目标进行检查
如何让automake在执行检查脚本之前安装其中一个库?automake安装目标进行检查
该项目为我们动态加载的库之一(通过调用dlopen
)建立一个模拟测试库。问题是我们无法覆盖我们的库路径进行测试,因为仍然有许多其他库必须被加载(这些由其他组件安装,而不是由此makefile直接编译)。
如果我可以在检查脚本运行之前简单地安装一些库,它会为我节省很多工作。如果我必须把它放在一个单独的makefile中并且先调用它,那么很好,没问题。基本上我只需要运行make check
来做正确的事情。
我找不到任何官方/正确的方式,但以下似乎工作。将一个新的依赖关系添加到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
规则。
我们不使用“make install”作为我们的最终包。我们用它来准备可以安装的更多包装。当有多个automake项目和具有不同版本依赖关系的全局库时,'libtool'也无法工作。 –
由于与版本相关的类似原因,我们不能使用LD_LIBRARY_PATH来加载这些库,我们需要一个更有限的路径范围(目前我们只支持一个 - 但显然答案是支持更多)。 –
这种行为会使'make check'做非常错误的事情。你的软件包的'make check'行为与几乎所有其他的'make check'行为不同。从http://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets:“您应该编写自检程序,以便在程序编译但未安装时运行。” –
这只是不可能的这个产品。它__needs__分期将结合几个依赖项目。 –