![如何定义automake系统中的顶级目录?](https://linux22.com/image/35125/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89automake%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E9%A1%B6%E7%BA%A7%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我通常使用典型的步骤来生成makefile,首先使用“build.sh init”生成配置文件,然后使用“configure”生成makefile和makefile.am文件。现在我想估计一些包含文件中的“../../”,例如包含“../../dirA/dirB/Ch”,只需将其写为包含“dirA/dirB/Ch”,因此设置必须修改configure.ac或makefile.am。谁能帮忙解决这个问题?
答案1
首先要注意的是,配置系统有两个 top_dir。源代码所在的顶级目录和代码生成的顶级目录。通常这两个目录是相同的。但在某些情况下,源代码驻留在只读文件系统上,因此您需要在其他地方构建软件。下面我将使用顶部构建目录,再次注意这可能与顶部源目录相同。
autoconf 已经为顶级构建目录定义了几个变量。其中之一称为“abs_top_builddir”。
假设您要使用的包含文件“abs_top_builddir”名为x.h
.您将创建一个名为的文件。x.h.in
在该文件中引用此变量的方式是用“@”将其括起来。所以你可能有:
#include "@abs_top_builddir@/A/dirB/C.h"
您需要做的另一件事是告诉配置x.h
脚本来创建头文件x.h.in
。您可以通过添加来做到这一点
AC_CONFIG_FILES([x.h])
AC_OUTPUT
到最后配置文件。您只需要一个AC_OUTPUT
,因此如果该行已经存在,则无需再次添加。现在运行autoconf
以创建配置脚本,运行时configure
您应该看到
configure: creating x.h
检查x.h
并确保包含行符合您的预期。
写完以上所有内容后,我还应该指出,这并不是通常所做的事情。相反,在 inCFLAGS
或某些类似名称的变量中,您只需包含目录即可。例如 Makefile.am 可能有:
AM_CPPFLAGS = -I$(top_srcdir)
这里我切换到源目录因为我不必像以前那样创建标头。您可能不需要添加额外的行配置文件因为这些线可能已经在那里了。