我有不同的子目录,需要以不同的方式编译。例如,某些文件需要使用 CFLAGS 包含其他一些文件。然而,CFLAGS只能在配置文件中设置,所以我想我需要多个configure.ac。
使用嵌套包是个好主意吗(如上所述gnu.org)为此,还是这是一种矫枉过正?
注意:我称其为矫枉过正,因为 gnu.org 的解决方案将 README 等添加到每一个子目录。这可以避免吗?
答案1
如果您不想包含 README 等,请添加该foreign
选项。例如在您的configure.ac
文件中添加:
AM_INIT_AUTOMAKE([foreign])
可以使用一个配置文件来设置子目录中使用的多种 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
环境变量。