我正在尝试学习 GNU autotools,并且我正在遵循一些教程,我尝试一步一步地进行:
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, <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b1d5d4c7f1d9d4dddddec6dec3ddd59fdec3d6" rel="noreferrer noopener nofollow">[email protected]</a>)
那么这个简单的宏就能完成所有这一切吗?如果是,怎么办?
最佳答案
是的,AC_INIT
可以完成所有这些;-) 您可以通过查看 /usr/share/autoconf/autoconf/general.m4
来了解它是如何做到这一点的查看AC_INIT
及其子例程是如何定义的。或者,只需创建一个除 AC_INIT
调用之外的空的 configure.ac
,然后查看生成的配置脚本以了解其扩展为什么。
我认为如果 exec_prefix
未设置,它默认为 prefix
,因此二进制文件仍会进入 /usr/local/bin
。当然,您可以通过简单地运行 make install
并检查二进制文件的位置来验证这一点。
关于makefile - Autoconf 和 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9749058/