我知道很难从自动工具手册中得到直接答案。有一些很好的从头到尾的教程here https://autotools.io/ and here http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool.
没有特定于包的标准变量*CPPFLAGS
在自动配置中。configure
可以调用CPPFLAGS=...
,automake 会添加这个CPPFLAGS
相关的 makefile 规则 - 搜索CPPFLAGS
in a Makefile.in
文件作为示例。出于这个原因,我建议你not将此变量用于其他用途。
添加标志Makefile.am
to the AM_CPPFLAGS
变量(所有预处理器调用的默认值)或覆盖单个预处理器标志target_CPPFLAGS
。在第 3 方库的示例中,最好使用如下名称:FOO_CPPFLAGS
保存预处理器选项,例如
FOO_CPPFLAGS="-I${FOO_DIR}/include -DFOO_BAR=1"
...
AC_SUBST(FOO_CPPFLAGS)
并在Makefile.am
:
AM_CPPFLAGS = -I$(top_srcdir) $(FOO_CPPFLAGS)
# or:
target_CPPFLAGS = -I$(top_srcdir) $(FOO_CPPFLAGS)
The top_srcdir
变量定义为configure
- 我用它来说明第二种情况。假设你有file.h
在另一个目录中other
,在顶级目录下。-I$(top_srcdir)
允许您将其包含为<other/file.h>
。或者,-I$(top_srcdir)/other
将允许您将其包含为<file.h>
.
另一个有用的预设变量 http://www.gnu.org/software/autoconf/manual/autoconf.html#Preset-Output-Variables is srcdir
- 当前目录。-I$(srcdir)
被添加到AM_CPPFLAGS
默认情况下. So if file.h
位于当前目录中,您可以将其包含在<file.h>
甚至"file.h"
. If other
是一个“兄弟”目录,-I$(srcdir)/..
将允许你包括<other/file.h>
, and -I$(srcdir)/../other
会允许<file.h>
.
我还要补充一点,一些软件包安装了 pkg-config.pc
文件。如果 pkg-config 的安装设置为搜索正确的目录,您可能会发现PKG_CHECK_MODULES
宏非常有用。