如何定义automake系统中的顶级目录?

如何定义automake系统中的顶级目录?

我通常使用典型的步骤来生成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) 

这里我切换到源目录因为我不必像以前那样创建标头。您可能不需要添加额外的行配置文件因为这些线可能已经在那里了。

相关内容