autoconf和automake中的DEFS和CPPFLAGS有什么区别 [英] What is the difference between DEFS and CPPFLAGS in autoconf and automake
问题描述
我已经阅读了 CFLAGS和CPPFLAGS 之间的区别.但是我的Makefile.am当前同时使用DEFS和CPPFLAGS,因此我不确定是否有区别.
I already read about the difference between CFLAGS and CPPFLAGS. But my Makefile.am currently uses both DEFS and CPPFLAGS and I am not sure about the difference.
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
并仅将缺少的定义(PKGDATADIR
和LOCALEDIR
)添加到CPPFLAGS
吗?
Both the CPPFLAGS and the DEFS seems to create defines with the -D
option. So whats the difference. Can I remove DEFS
and just add the missing defines (PKGDATADIR
and LOCALEDIR
) to CPPFLAGS
?
推荐答案
DEFS
在autoconf中定义如下:
DEFS
is defined in autoconf as follows:
-D选项传递给C编译器.如果调用了AC_CONFIG_HEADERS,则configure会用-DHAVE_CONFIG_H代替"@DEFS @"(请参见 配置标头).配置时未定义此变量 仅在创建输出文件时才执行其测试.看 设置输出变量,用于检查先前的结果 测试.
-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 -p > rules
)执行make时.我们可以检查生成的rules
文件,以了解make实际执行的操作.
When make is executed with the -p
flag (e.g. make -p > rules
). We can examine the resulting rules
file to find out what make make will actually do.
假设调用AC_CONFIG_HEADERS
宏,则最初定义DEFS
的方法如下:
Assuming the AC_CONFIG_HEADERS
macro is called then DEFS
is initially defined as follows:
DEFS = -DHAVE_CONFIG_H
假设我们定义DEFS
如下:
DEFS += \
-DLOCALEDIR=\"$(localedir)\" \
-DDATADIR=\"$(datadir)\" \
-DPKGDATADIR=\"$(pkgdatadir)\"
然后DEFS
看起来像这样:
DEFS = -DHAVE_CONFIG_H -DLOCALEDIR=\"$(localedir)\" -DDATADIR=\"$(datadir)\" \
-DPKGDATADIR=\"$(pkgdatadir)\"
接下来,让我们看看在自动makemake生成的Makefile中使用DEFS
的方式,Makefile中的编译规则将如下所示:
Next lets look at the way DEFS
is used in the Makefiles that are generated by automake, the compile rule in the Makefile will look like this:
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
如我们所见,DEFS
首先出现,然后是其他一些变量和AM_CPPFLAGS
每次出现DEFS
后,总是出现另一个AM_CPPFLAGS
及其变体,例如foo_CPPFLAGS
.
As we can see, DEFS
appears first, followed by some other variables and the AM_CPPFLAGS
Every further occurrence of DEFS
is always followed by another occurrence of AM_CPPFLAGS
and its variants such as foo_CPPFLAGS
.
因此,总结这个问题,我认为很明显,可以删除DEFS
,而可以将其内容放入CPPFLAGS
中.我也在自动工具频道中的IRC上问了这个问题.我建议不要使用DEFS
,而只能使用CPPFLAGS
.
So to conclude this question, I think its clear that DEFS
can be removed and instead its content can be put into CPPFLAGS
. I also asked this question on IRC in the autotools channel. It was suggested to me, not to use DEFS
and only use CPPFLAGS
.
这篇关于autoconf和automake中的DEFS和CPPFLAGS有什么区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!