gpt4 book ai didi

autoconf - autoconf和automake中的DEFS和CPPFLAGS有什么区别

转载 作者:行者123 更新时间:2023-12-02 21:26:24 27 4
gpt4 key购买 nike

我已经了解了 CFLAGS and CPPFLAGS 之间的区别。但我的 Makefile.am 目前同时使用 DEFS 和 CPPFLAGS,我不确定其中的区别。

DEFS += -DLOCALEDIR=\"$(localedir)\" -DDATADIR=\"$(datadir)\" -DPKGDATADIR=\"$(pkgdatadir)\"

和:

src_foo_CPPFLAGS = \
$(AM_CPPFLAGS) \
-I$(top_builddir)/src \
-DDATADIR='"$(datadir)"' \
-DMODULEDIR='"$(moduledir)"' \
-DLIBEXECDIR='"$(libexecdir)"'

CPPFLAGS 和 DEFS 似乎都使用 -D 选项创建定义。那么有什么区别呢。我可以删除 DEFS 并仅将缺少的定义(PKGDATADIRLOCALEDIR)添加到 CPPFLAGS 吗?

最佳答案

DEFS 在 autoconf 中定义如下:

-D options to pass to the C compiler. If AC_CONFIG_HEADERS is called, configure replaces ‘@DEFS@’ with -DHAVE_CONFIG_H instead (see Configuration Headers). This variable is not defined while configure is performing its tests, only when creating the output files. See Setting Output Variables, for how to check the results of previous tests.

当使用 -p 标志执行 make 时(例如 make -p > 规则)。我们可以检查生成的 rules 文件来找出 make make 实际会做什么。

假设调用 AC_CONFIG_HEADERS 宏,则 DEFS 最初定义如下:

DEFS = -DHAVE_CONFIG_H

假设我们定义DEFS如下:

DEFS += \
-DLOCALEDIR=\"$(localedir)\" \
-DDATADIR=\"$(datadir)\" \
-DPKGDATADIR=\"$(pkgdatadir)\"

然后 DEFS 将如下所示:

DEFS = -DHAVE_CONFIG_H -DLOCALEDIR=\"$(localedir)\" -DDATADIR=\"$(datadir)\"  \
-DPKGDATADIR=\"$(pkgdatadir)\"

接下来我们看看automake生成的Makefile中DEFS的使用方式,Makefile中的编译规则如下:

COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)

正如我们所见,DEFS 首先出现,然后是一些其他变量和 AM_CPPFLAGS每次出现 DEFS 后,总是会出现另一次 AM_CPPFLAGS 及其变体,例如 foo_CPPFLAGS

因此,为了结束这个问题,我认为很明显可以删除 DEFS ,而可以将其内容放入 CPPFLAGS 中。我还在 IRC 的 autotools channel 上问了这个问题。有人建议我不要使用 DEFS 而只使用 CPPFLAGS

关于autoconf - autoconf和automake中的DEFS和CPPFLAGS有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23886370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com