- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个使用 autoconf
的 C++ 项目。 & automake
,我正在努力正确设置 *CPPFLAGS
中的包含路径.我已经阅读了大约 3 个小时的文件,但我还无法弄清楚。我不是在寻找黑客,而是在寻找正确的方法。这是我的难题。
在我看来,包含路径有 3 个完全不同的来源:
configure --with-XXX=<PATH>
配置. #include <file.h>
即使 file.h
是包的一部分,所以要编译它们,我必须正确设置包含路径。 (注意,不能编辑所有这些文件。)CPPFLAGS
一点也不。 configure.ac
内通过 AC_SUBST(CPPFLAGS, "$CPPFLAGS -I<path>")
. Makefile.am
内通过 test_CPPFLAGS = -I<path>
. CPPFLAGS
运行前make
,这会覆盖 Type 1 设置,导致编译失败。当然,用户可以尝试使用 CXXFLAGS
相反,但那个有不同的用途(请记住,我要求的是正确的方法来做到这一点,而不是黑客)。 AM_CPPFLAGS
设置类型 1 路径来解决此问题。里面
configure.ac
. (供引用:如果您设置了
AM_CPPFLAGS
而不是
CPPFLAGS
,但您仍然需要运行一些检查,例如
AC_CHECK_HEADERS
,您需要临时设置
CPPFLAGS
然后将其恢复为检查工作;这是解释
here 。)这释放了
CPPFLAGS
对于类型 3 路径,但不幸的是编译失败,因为
Makefile
-s 由
configure
生成只会使用
AM_CPPFLAGS
如果没有专门的
<target>_CPPFLAGS
存在。所以,如果
test_CPPFLAGS
存在类型 2 路径,正在编译
test
将失败,因为它没有获得 Type 1 路径。
Makefile.am
内指定始终使用
AM_CPPFLAGS
.但这是“书本”吗?我可以以全局方式执行此操作,还是必须编辑每一个
target_CPPFLAGS
?还有另一种“正确”的解决方案吗?
最佳答案
我知道很难从 autotools 手册中得到直接的答案。有几个很好的从头到尾的教程 here和 here .
没有特定于包的标准变量*CPPFLAGS
在自动配置中。 configure
可以用 CPPFLAGS=...
调用, automake 会添加这个 CPPFLAGS
到相关的 makefile 规则 - 搜索 CPPFLAGS
在 Makefile.in
文件作为示例。出于这个原因,我建议您不要将此变量用于其他任何事情。
在 Makefile.am
中添加标志到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)
top_srcdir
变量由
configure
定义- 我用它来说明第二种情况。假设您有
file.h
在另一个目录
other
,在顶级目录下。
-I$(top_srcdir)
允许您将其包含为
<other/file.h>
.或者,
-I$(top_srcdir)/other
将允许您将其包含为
<file.h>
.
srcdir
- 当前目录。
-I$(srcdir)
已添加到
AM_CPPFLAGS
默认情况下。所以如果
file.h
在当前目录中,您可以将其包含在
<file.h>
中甚至
"file.h"
.如果
other
是一个“兄弟”目录,
-I$(srcdir)/..
将允许您包含
<other/file.h>
, 和
-I$(srcdir)/../other
将允许
<file.h>
.
.pc
文件。如果 pkg-config 的安装设置为搜索正确的目录,您可能会找到
PKG_CHECK_MODULES
宏非常有用。
关于autotools - 如何使用自动工具设置包含路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230827/
我正在编写一个小型库,并希望使用带有 automake 1.11 的 autotools 来访问它。唯一有趣的结果是库 libfoo.so。 我为库编写了一个单元测试,我希望在 make 过程中或在运
我有一个自动工具项目。如果用户在构建过程中进行了配置,我希望从项目中排除一些文件。例如,如果构建配置了 --no-gui ,则与 GUI 相关的文件不会包含在构建中。 autoconf 中此类标志的标
我需要将 libmagic 链接到我使用 autotools 构建的项目。 我目前的解决方案是:configure.ac中的LIBS+="-lmagic" 但我认为实现此目的更合适的方法是在 conf
我有一个用 C 编写的相当大的程序。它跨越多个文件,并进行了一些重组以试图弥补平台问题。具体来说,我有不同操作系统、体系结构和编译器的头文件,这些头文件定义了用于处理事物的宏。例如,-v flag 打
我正在编译一个 基于 autotools C 的项目 我收到了一些警告和错误。它们显示如下: foo.c:123: warning: some message 我希望它们显示如下: /full/pat
我需要将“-Wall -Werror”设置为项目中所有源文件的 CPPFLAGS。有没有办法在自动工具中做到这一点? 我在 configure.ac 中尝试了以下内容: AC_SUBST([AM_CP
我的应用程序使用 autotools 在 $pkgdatadir 中安装运行时所需的数据文件。应用程序的部分内容是用 C 编写的,数据目录的路径由 Makefile.am 中的以下语句设置: AM_C
我刚开始使用 autotools,如果这听起来有点基础但谷歌搜索并没有显示太多内容,请原谅我。 我将如何使用 autotools 生成自定义 conf 文件。 看是基于m4的configure包含了必
我在 autoconf 代码中看到很多关于被 dnl'ed 而不是 dnl'ed 的东西。什么是dnl? 最佳答案 来自 GNU M4 1.4.13 macro processor手动的: 8.1 D
例如,我想将选项 --enable-foo --enable-bar 添加到 ./configure 命令。 许多 ./configure 选项可以通过 BR2_ 配置间接设置,但许多软件有太多选项,
我需要构建一个配置有自动工具的库。通常的configure && make && make install步骤生成版本化的共享库,类似于libfoo.so.x.x是否可以修改configure.ac或
假设我有两个 autotools 项目: libmyutils libmypackage libmypackage 库依赖于 libmyutils。有没有办法让 libmypackage 链接到并引用
我正在构建一个小型库,并且正在使用 autotools。代码是在 C++ 中,它输出一些 html 代码。有很多与 html 代码相关的样式表和 javascript 代码。由于后者是固定的,因此代码
我正在研究自动工具。我有一些使用 java 类的 c++ 文件。我可以使用 autotools 为我的项目创建可执行文件,但我无法为项目中包含的 java 类创建可执行文件。我的项目将此 java 可
我想要一个用 autotools 构建的 c 库。老实说,我几乎不知道它们是如何工作的:/(我需要的库是“https://github.com/p4lang/PI”) 我已经执行了 ./configu
运行配置脚本后,我得到了一系列显示“已缓存”的输出。例如: checking for gcc... gcc checking for gcc... (cached) gcc ... checking
我正在尝试在 Cygwin 中编译一个包。我跑: ./configure 然后一两分钟后,它说: checking for working terminal libraries... Cannot f
如何告诉 automake 使用名称中包含空格的文件?这似乎不起作用。 bin_PROGRAMS = prog prog_SOURCES = "a file.c" "another file.c" 最
所以我一直在使用 Autotools 尝试学习工具链,以便我可以在我的一些跨平台项目中使用它。我已经很好地掌握了最基本的知识,但我在这里遇到了一个问题。 在我的源代码树中,我有一个“data”文件夹,
当我使用“make”运行我的自动工具生成的 Makefile 时,它会在当前目录中生成文件。我希望它不要“污染”我的目录,而是将程序移动到“bin/”(因为源在“src/”中) 这可以通过自动工具
我是一名优秀的程序员,十分优秀!