autoconf 中不同子目录的嵌套包?

autoconf 中不同子目录的嵌套包?

我有不同的子目录,需要以不同的方式编译。例如,某些文件需要使用 CFLAGS 包含其他一些文件。然而,CFLAGS只能在配置文件中设置,所以我想我需要多个configure.ac。

使用嵌套包是个好主意吗(如上所述gnu.org)为此,还是这是一种矫枉过正?

注意:我称其为矫枉过正,因为 gnu.org 的解决方案将 README 等添加到每一个子目录。这可以避免吗?

答案1

如果您不想包含 README 等,请添加该foreign选项。例如在您的configure.ac文件中添加:

AM_INIT_AUTOMAKE([foreign])

Automake手册中的严格性

可以使用一个配置文件来设置子目录中使用的多种 C 标志。但除非你想开始成为一名认真的汽车黑客,否则我会从简单的解决方案开始并使用外国的

这是一个小例子,展示如何CFLAGS从其他事物中进行设置。为简单起见,我将CFLAGS根据另一个环境变量进行设置,这样我就不必处理配置参数。我将CFLAGS在主文件中进行设置,而您想要执行的操作则在子目录文件中进行。我希望所有这一切都能很容易改变。

我的configure.ac文件是:

AC_INIT([foo], [1.0], [https://example.com])
AM_INIT_AUTOMAKE()
AC_SUBST(PROJ1_CFLAGS)
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

我的 Makefile.am 文件是:

CFLAGS=@PROJ1_CFLAGS@

现在构建一切:

$ autoreconf -fi
$ autoconf
$ CFLAGS='-g' PROJ1_CFLAGS='-Wall' ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
$

如果你查看 Makefile,你会看到:

CFLAGS='-Wall'

它实际上是从PROJ1_CFLAGS环境变量设置的,而不是CFLAGS环境变量。

相关内容