makefile - Autoconf 和 makefile

标签 makefile autotools autoconf

我正在尝试学习 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/

相关文章:

c++ - 为什么 "make distcheck"在这个非常基本的 "Hello, World!"自动工具示例中失败?

linux - autotools 项目中 undefined reference

无法使用 eclipse 调试 C/C++ 代码,因为缺少调试信息

c++ - UVM-SystemC库 'make check'错误

makefile - Makefile中@符号的含义? (不是回声抑制,也不是自动变量)

c - 当我的 C 文件有其他依赖项时,如何准备 ./configure make make install?

makefile - 为什么automake无法生成Makefile.in

makefile - 如何在 Cmake QtCreator 项目中为 make 设置多个并行作业?

linux - 配置 NGINX 时如何使用环境变量作为前缀路径?

C++项目与多个版本的boost的兼容性