如何更改 automake 安装 libtool 库的位置?

how to change where automake installs a libtool library?

我正在从事一个自由软件项目:https://github.com/ccr/ccr

在这个项目中,我正在构建一些共享对象库,它们实际上是 HDF5 的插件。

我不想在 /usr/local/lib 中安装这些库。我想将它们安装在一个特殊的 HDF5 插件目录中。

这是我现在拥有的:

AM_CPPFLAGS = -I$(HDF5_ROOT)/include -I$(BZ2_ROOT)/include
plugindir = /usr/local/hdf5/lib/plugin

# The libh5bz2 library for plugin module.
# Build it as shared library.
lib_LTLIBRARIES = libh5bz2.la
libh5bz2_la_SOURCES = H5Zbzip2.c

LDFLAGS = -L$(BZ2_ROOT)/lib

如何在 plugindir 中安装我的库?

前缀(lib_)决定了安装路径($libdir)。 您可以设置自己的前缀:

plugindir = ${prefix}/hdf5/lib/plugin
plugin_LTLIBRARIES = libh5bz2.la

旁注:不要在 Makefile 中硬编码完整路径。而是使用预定义的变量。例如而不是 /usr/local/hdf5/lib/plugin 使用类似 ${prefix}/hdf5/lib/plugin 的东西,以允许用户轻松更改实际安装路径..

定义变量'libdir'为一个字符串,它是一个路径。 该变量声明(向 automake 和 libtool)安装库的位置。 如果未定义,库将安装到常规位置。

# install into private dir "lib" near other plugin executables
libdir = $(plugindir)/lib

旁白:当您对 plugindir 的定义进行硬编码时,您可能会安装到一个奇怪的地方。 当你使用 ${prefix} 您可能会发现它安装到常规位置的子目录中:

plugindir = $(prefix)/hdf5/plugin/lib

然后可能会安装到 /usr/local/lib/hdf5/plugin/lib 哪个更传统?

此外,您可能需要在任何引用您的库的可执行文件或库上设置 rpath。