- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要根据库的存在有条件地编译一些代码。使用 autoconf/automake 似乎这应该很容易,但我无法弄清楚。
例如,如果存在一个 PNG 库,我想包含使用它的代码。我的 configure.ac 有:
AC_CHECK_LIB([png], [png_create_write_struct_2])
if USE_LIBPNG
libdev_la_SOURCES += png.c
endif
AM_CONDITIONAL([USE_LIBPNG], [test SOMETHINGOROTHER])
AC_CHECK_LIB([png], [png_create_write_struct_2], [HAS_LIBPNG=1])
AM_CONDITIONAL([USE_LIBPNG], [test "x$HAS_LIBPNG" = "x1"])
最佳答案
如果您正在检查的图书馆供应 .pc
用于 pkg-config
的文件,那么你最好使用 PKG_CHECK_MODULES
以获得正确的标志。 libpng 执行以下操作:
(在 configure.ac
中)
PKG_CHECK_MODULES([libpng], [libpng12])
$(libpng_CFLAGS)
和
$(libpng_LIBS)
您要添加到
Makefile.am
(可能在
AM_CFLAGS
/
AM_CXXFLAGS
和
LDADD
或其特定于目标的版本中)。
configure
如果
libpng12.pc
则失败并出现错误没有找到。如果你想要
configure
要继续,您需要将第三个和第四个参数提供给
PKG_CHECK_MODULES
, 分别是
ACTION-IF-FOUND
和
ACTION-IF-NOT-FOUND
:
configure.ac
中)
PKG_CHECK_MODULES([libpng], [libpng12], [HAVE_LIBPNG=1], [HAVE_LIBPNG=0])
automake
有条件,您可以执行以下操作:
configure.ac
中)
AM_CONDITIONAL([USE_LIBPNG], [test "$HAVE_LIBPNG" -eq 1])
AC_DEFINE
像这样:
configure.ac
中)
AS_IF([test "$USE_LIBPNG" -eq 1], [AC_DEFINE([USE_LIBPNG], [1], [Define if using libpng.])])
Makefile.am
中设置定义:
Makefile.am
中)
AM_CPPFLAGS =
if USE_LIBPNG
AM_CPPFLAGS += -DUSE_LIBPNG
endif
AC_DEFINE
如果您使用
AC_CONFIG_HEADERS
,可以将定义放在标题中.如果您使用
AM_SILENT_RULES([yes])
,我想这并不重要或者不关心你的命令行是否整洁(老实说,
automake
无论如何都会生成一些非常粗糙的命令行)。
autoconf
风格
configure.ac
中)
# This is because the first PKG_CHECK_MODULES call is inside a conditional.
PKG_PROG_PKG_CONFIG
AC_ARG_WITH([libpng],
[AS_HELP_STRING([--with-libpng],
[support handling png files @<:@default=check@:>@])],
[],
[with_libpng=check])
AS_CASE(["$with_libpng"],
[yes], [PKG_CHECK_MODULES([libpng], [libpng12], [HAVE_LIBPNG=1])],
[no], [],
[PKG_CHECK_MODULES([libpng], [libpng12], [HAVE_LIBPNG=1], [HAVE_LIBPNG=0])])
AM_CONDITIONAL([USE_LIBPNG], [test "$with_libpng" != no -a "$HAVE_LIBPNG" -eq 1])
Makefile.am
中)
if USE_LIBPNG
AM_CPPFLAGS += -DUSE_LIBPNG
AM_CFLAGS += $(libpng_CFLAGS)
LDADD += $(libpng_LIBS)
libdev_la_SOURCES += png.c
endif
.pc
文件
.pc
的库的方法。文件。我会跳过下面好的细节
autoconf
风格。
AC_CHECK_LIB
设置一个缓存变量,所以你可以测试它而不是替换
ACTION-IF-FOUND
的
AC_CHECK_LIB
:
configure.ac
中)
AC_CHECK_LIB([png], [png_create_write_struct_2])
# Then test:
AS_IF([test "$ac_cv_lib_png_png_create_write_struct_2" = yes], [HAVE_LIBPNG=1], [HAVE_LIBPNG=0])
# Or set conditional:
AM_CONDITIONAL([USE_LIBPNG], [test "$ac_cv_lib_png_png_create_write_struct_2" = yes])
关于autoconf/automake : conditional compilation based on presence of library?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5176929/
我正在构建我的第一个 autoconf 托管包。 但是,我在任何地方都找不到任何简单的示例来说明如何指定所需的库,并在不同的地方找到该库。 我目前有: AC_CHECK_LIB(['event'],
现在我正尝试在我的 Mac 上构建 Automake,到目前为止一切都进展顺利。我构建了 Autoconf 和 m4,没有任何问题(与 git pulls 相反)。然后我去了 Automake,这就是
我正在尝试在 RedHat Linux 机器上构建 ZooKeeper。 (ZooKeeper 到底是什么可能并不重要:-) 当我按照包装说明进行操作时,我得到: $ autoreconf -if
我对 autoconf 和 automake 的工作原理有非常基本的了解,这是从各种教程中收集的。但是,由于我希望我的库在构建过程中具有灵 active ,因此它们需要具有其他软件中常见的 --wit
为什么 autoconf 脚本中的条件语句在它们的变量前加上“x”?例如,GNU 提供的用于测试 Boost 的宏具有条件,例如 if test "x$want_boost" = "xyes"; th
我已经从 Autoconf Archive 下载了一个宏,我想使用它。我必须在我的 configure.ac 文件中放入什么才能使用这个宏? 最佳答案 您可能希望将 AC_CONFIG_MACRO_D
我正在开发一个将与 GNU autoconf/automake 一起分发的项目,并且我有一组调用 awk 脚本的 bash 脚本。我希望 bash 脚本最终出现在 $PATH 中,而不是 awk 脚本
我正在使用自动配置。现在我有一个生成的中间 .cpp 文件。我想在执行“make clean”时删除 .cpp 文件。 我尝试在 CONFIG_CLEAN_FILES 中指定文件变量,但这仅在我执行
我正在尝试构建 Gecko 代码,我从 Github 克隆了它: git clone https://github.com/mozilla/gecko-dev.git 我收到 autoconf 2.1
我正在运行 autoconf 并配置将 SHELL 设置为“/bin/sh”。这造成了巨大的问题。如何强制 SHELL 为 autoconf 的 '/bin/bash'? 我试图让它在 osx 上运行
文件说 Macro: AS_IF (test1, [run-if-true1], ..., [run-if-false]) Run shell code test1. If test1 exits w
当我运行 ./configure 时,它有时会认为它太旧了,并通过丢失的脚本重新运行 autoconf 以重新生成自身。有时它会导致奇怪的损坏,因为 autoconf 目标机器比最初用于生成配置的
我有一个configure.ac文件,其中包含以下行: AC_DEFINE(CONF_XDISP, ":8", "X screen number") 这些常量在C源代码中用于设置编译默认值。我还有一个
我想在 [] 中重新组合多个语句: AC_ARG_WITH( [float], [AS_HELP_STRING( [--with-float], [us
我正在尝试编写一个configure.ac文件,以便生成的配置脚本搜索包含给定静态库的库目录,例如libsomething.a.我怎样才能做到这一点?目前我让它只检查一个位置: AC_CHECK_FI
我已经了解了 CFLAGS and CPPFLAGS 之间的区别。但我的 Makefile.am 目前同时使用 DEFS 和 CPPFLAGS,我不确定其中的区别。 DEFS += -DLOCALED
我已经了解了 CFLAGS and CPPFLAGS 之间的区别。但我的 Makefile.am 目前同时使用 DEFS 和 CPPFLAGS,我不确定其中的区别。 DEFS += -DLOCALED
在我的 configure.ac 文件中,我有这样的警告和错误: AC_MSG_ERROR([找不到 Boost Math 头文件,您是否正确指定了 --with-boost-include-path
我正在尝试构建一个项目,但它抛出了一个错误: autoreconf: running: /usr/bin/autoconf --force configure.ac:19: error: possib
我有一个 C++ autoconf 管理的项目,我正在适应在 FreeBSD 主机上进行编译。 原来的系统是 Linux,所以我做了一个 AM_CONDITIONAL 来区分我正在构建的主机并将代码分
我是一名优秀的程序员,十分优秀!