小编Ian*_*cky的帖子

autoconf/automake:基于库的存在的条件编译?

我需要根据库的存在有条件地编译一些代码.使用autoconf/automake似乎应该很容易,但我无法弄明白.

例如,如果存在PNG库,我想包含使用它的代码.我的configure.ac有:

AC_CHECK_LIB([png], [png_create_write_struct_2])
Run Code Online (Sandbox Code Playgroud)

我的Makefile.am有:

if USE_LIBPNG
libdev_la_SOURCES += png.c
endif
Run Code Online (Sandbox Code Playgroud)

(它将png.c添加到libdev的源列表中,以便进行编译).

像USE_LIBPNG这样的automake条件要求在configure.ac中定义条件,所以我需要:

AM_CONDITIONAL([USE_LIBPNG], [test SOMETHINGOROTHER])
Run Code Online (Sandbox Code Playgroud)

问题是,什么可以测试SOMETHINGOROTHER?AC_CHECK_LIB定义了什么,我可以测试?

AC_CHECK_LIB的默认行为是定义一个可以在源代码中使用的符号(在config.h中),但这对Makefile没有帮助,因为AM_CONDITIONAL需要shell测试

我尝试覆盖默认的AC_CHECK_LIB行为,如下所示:

AC_CHECK_LIB([png], [png_create_write_struct_2], [HAS_LIBPNG=1])
Run Code Online (Sandbox Code Playgroud)

之后我可以测试它:

AM_CONDITIONAL([USE_LIBPNG], [test "x$HAS_LIBPNG" = "x1"])
Run Code Online (Sandbox Code Playgroud)

这很丑陋,但适用于Makefile ...但是会产生一个新问题:因为它丢弃了原来的AC_CHECK_LIB行为,而且我不再在config.h中添加一个符号,这是我需要的.

我必须遗漏一些基本的东西,或者可能做错了.已经挖了几个小时,没有找到答案.

任何人?

automake autoconf

13
推荐指数
1
解决办法
9363
查看次数

标签 统计

autoconf ×1

automake ×1