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 34libdir = exec-prefix/lib
所以如果我使用AC_PREFIX_DEFAULT=(.)
,我正在寻找的行为不应该是默认的吗?当我将noinst_LIBRARIES=foo.a
与AC_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
buildir
和 srcdir
将
不同。
链接
Extending Autotools【讨论】:
以上是关于Autotools 指定静态库的安装路径的主要内容,如果未能解决你的问题,请参考以下文章