【问题标题】:Autoconf and makefile自动配置文件和生成文件
【发布时间】:2012-03-17 10:04:59
【问题描述】:

我正在尝试学习 GNU 自动工具,并且我正在学习一些教程,我尝试从以下步骤逐步完成:

http://kern-81.homepage.t-online.de/autotools_tutorial.pdf

但我有一个问题,在第 8 页手动编写了 Makefile.in 和一行:

BINDIR=@bindir@

之后

autoconf
./configure

在我生成的 makefile 中,我得到了

BINDIR=${exec_prefix}/bin

但是当我这样做时

@echo $(exec_prefix)

似乎这个变量是空的,所以我会的一切

make install 

会转到/bin,这有点奇怪,为什么它没有设置为/usr/bin,我应该向autoconf发出一些参数吗?

同样在这个 .pdf 文件中写道:

bindir is an output variable of AC INIT which also detects includedir, srcdir, libdir, and others.

是真的吗?因为在这个 autoconf.am 的例子中是:

AC_INIT(helloworld, 0.0.1, dev@helloworld.org)

所以这个简单的宏可以完成所有这些吗?如果是,怎么做?

【问题讨论】:

  • 您可能打错字了,或者误解了您的结果。生成的 Makefile 中应该有一行将 exec_prefix 设置为 ${prefix},

标签: makefile autotools autoconf


【解决方案1】:

是的,AC_INIT 完成了所有这些 ;-) 您可以通过查看 /usr/share/autoconf/autoconf/general.m4 来了解它是如何做到的,以了解 AC_INIT 及其子例程是如何定义的。或者,只需创建一个除AC_INIT 调用外为空的configure.ac,然后查看生成的配置脚本以查看其扩展为什么。

我认为如果exec_prefix 未设置,则默认为prefix,因此二进制文件仍将进入/usr/local/bin。当然,您可以通过简单地运行 make install 并检查二进制文件的去向来验证这一点。

【讨论】:

  • +1,但我质疑推荐某人看起来一般的智慧.m4!
  • Autotools 默认使用 /usr/local 的基本前缀,而不是 /usr,所以如果你不更改它,那么 exec_prefix 将是 /usr/local/bin。
  • @WilliamPursell,我想说明AC_INIT 不是一个“简单”宏...
  • 谢谢,安装到 /usr/local/bin 会很累,所以没关系,我可以接受。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多