Autotools 指定静态库的安装路径

Posted

技术标签:

【中文标题】Autotools 指定静态库的安装路径【英文标题】:Autotools specifying install path of static library 【发布时间】:2017-07-12 15:08:20 【问题描述】:

如何将库安装到$(top_srcdir)/lib/foo.a

如果我尝试使用:

noinst_LIBRARIES=$(top_srcdir)/lib/foo.a foo_a_SOURCES= foo.c foo.h bar.c, bar.h

我收到library has foo_a as canonical name (possible typo)

$(top_srcdir)/foobar/ 中有 foo.* 和 bar.*。

有什么想法吗?

【问题讨论】:

您不会在 autotools 中硬编码便利库的位置。 你可能想添加一个钩子来在 make 之后将库移动到想要的位置。我记得规则是全本地的。你可以在官方文档中查看。我现在没有电脑 @VicenteAdolfoBoleaSánchez 我想我可以添加一个钩子,但根据this slide 34 libdir = exec-prefix/lib 所以如果我使用AC_PREFIX_DEFAULT=(.),我正在寻找的行为不应该是默认的吗?当我将noinst_LIBRARIES=foo.aAC_PREFIX_DEFAULT(.) 一起使用时,它会构建到Makefile.am 的目录(在我的问题示例top_srcdir/foobar 中,我希望它构建到top_srcdir/lib 请添加对应的编程语言标签! @Sergii 我的问题与自动工具有关,我猜我是用 C 编码的,但这有关系吗? 【参考方案1】:

由于您尝试实现的操作不是标准的,GNU/Autotools 不支持该功能。尽管如此,GNU/Autotools 允许程序员通过使用扩展其 Makefile 规则功能的本地规则来调整他们的系统。

例如,要将您的库复制到您可以编写的特定位置:

# Standard way
noinst_LDLIBRARIES = foo.a

# Here is where you tweak, all-local will be performed
# after compilation.
all-local:
  -cp $(builddir)/foo.* $(buildir)/libs

注意$(srcdir)$(builddir)在配置脚本所在目录下调用configure时是相同的。什么时候 您从不同的目录中调用 configure buildirsrcdir 将 不同。

链接

Extending Autotools

【讨论】:

以上是关于Autotools 指定静态库的安装路径的主要内容,如果未能解决你的问题,请参考以下文章

Autotools:PROGRAMS 安装路径

makefile里怎么指定库的路径

Python:三方库安装路径及路径变更

静态库和动态库的生成和编译

为啥我需要使用已安装库的相对路径?

如何把文件加入linux系统中