- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经了解了 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
并仅将缺少的定义(PKGDATADIR
和 LOCALEDIR
)添加到 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/
我正在将一个项目从运行良好的旧 Gradle 版本迁移到当前版本,并且刚刚遇到一个又一个问题。大多数我用谷歌搜索过,但刚刚在这个问题上碰壁了。 Error:(20, 0) Could not get
假设在我的 makefile 中有 program_INCLUDE_DIRS += ../inc CPPFLAGS += $(foreach includedir,$(program_IN
据我了解,CFLAGS(或 C++ 的 CXXFLAGS)用于编译器,而 CPPFLAGS 则由预处理器使用。 但我还是不明白其中的区别。 我需要为 #include 包含的头文件指定包含路径 - 因
#define _BSD_SOURCE 还是设置 CPPFLAGS=-D_BSD_SOURCE 更好? 在我看来,如果一段源代码依赖于特定标准,最好在代码本身中使用#define 明确说明。但是,很多
我正在尝试使用 std::function 但是编译器报错 Error:(50, 10) error: no type named 'function' in namespace 'std' 我试过修
我需要将“-Wall -Werror”设置为项目中所有源文件的 CPPFLAGS。有没有办法在自动工具中做到这一点? 我在 configure.ac 中尝试了以下内容: AC_SUBST([AM_CP
我用 ./configure 设置了 CPPFLAGS 和 LDFLAGS,但是仍然找不到头文件 fst.h。尽管它位于 CPPFLAGS 目录中指定的位置。 ./configure CPPFLAGS
在用于 surf 浏览器的 Arch Linux PKGBUILD 中,有: sed -i 's/CPPFLAGS =/CPPFLAGS +=/g' config.mk sed -i 's/CFLAG
我正在处理一个 Android.mk 文件,对于单个模块,其中一个文件需要不同的 CPPFLAGS;即,它需要启用 -frtti,而其他需要 Android 默认值 -fno-rtti。 显而易见的解
我正在尝试在 Mac OS X Mavericks 上构建 php gettext 模块。 使用 brew install gettext 安装了 gettext,并在 /usr/local/opt/
GNU Make 中的 CPPFLAGS 和 CXXFLAGS 有什么区别? 最佳答案 CPPFLAGS 应该是 C PreP 处理器的标志; CXXFLAGS 用于 C++ 编译器的标志。 make
我似乎无法在我的项目上成功运行 cabal install,因为它依赖于 text-icu 包,而该包需要 icu4c 库安装在系统上。 嗯,我使用 brew install icu4c 在我的 Ma
我编写了一个简单的 printf C 代码并制作了一个简单的 makefile。当我使用 CFLAGS、CPPFLAGS 和 LDFLAGS 运行 make 时,变量的值进入 cc 执行,然后是没有这
我在 Debug模式下构建我的应用程序,我注意到一些错误提示“父级未能评估:没有位置,值可能已被优化掉”。因此,我尝试在我的模块 build.gradle 中添加“-O0”,如下所示: externa
void DoSomething() { ... m_a = new SomeContext(m_data); ... } 使用 Android Studio 的实验性
我想添加编译器标志来构建我的 Postgres C/C++ 扩展。我尝试了标准的 Makefile 实践,但 pg_config 没有选择我添加的任何编译器标志。 Makefile如下: 1 #
我是一名优秀的程序员,十分优秀!