autoconf / automake / libtool-如何取消定义PACKAGE_NAME,PACKAGE_TARNAME,PACKAGE_VERSION等

时间:2018-09-05 19:16:28

标签: autoconf automake libtool

构建日志:

20:10:36 make[3]: Entering directory `/home/ubuntu/build/ColossusCoinXT/distsrc-i686-pc-linux-gnu/src/minizip'
20:10:36 /bin/bash ./libtool  --tag=CC   --mode=compile gcc -m32 -DPACKAGE_NAME=\"minizip\" -DPACKAGE_TARNAME=\"minizip\" -DPACKAGE_VERSION=\"1.2.8\" -DPACKAGE_STRING=\"minizip\ 1.2.8\" -DPACKAGE_BUGREPORT=\"bugzilla.redhat.com\" -DPACKAGE_URL=\"\" -DPACKAGE=\"minizip\" -DVERSION=\"1.2.8\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I.  -I./../.. -I/home/ubuntu/build/ColossusCoinXT/depends/i686-pc-linux-gnu/share/../include/   -pipe -O2 -O2 -g -c -o ioapi.lo ioapi.c  
20:10:36 libtool: compile:  gcc -m32 -DPACKAGE_NAME=\"minizip\" -DPACKAGE_TARNAME=\"minizip\" -DPACKAGE_VERSION=\"1.2.8\" "-DPACKAGE_STRING=\"minizip 1.2.8\"" -DPACKAGE_BUGREPORT=\"bugzilla.redhat.com\" -DPACKAGE_URL=\"\" -DPACKAGE=\"minizip\" -DVERSION=\"1.2.8\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I./../.. -I/home/ubuntu/build/ColossusCoinXT/depends/i686-pc-linux-gnu/share/../include/ -pipe -O2 -O2 -g -c ioapi.c  -fPIC -DPIC -o ioapi.o
20:10:36 gcc: error: 1.2.8": No such file or directory

问题在第三行:"-DPACKAGE_STRING=\"minizip 1.2.8\"",由于空间的原因,编译器将此定义解释为两个不同的参数。我正在寻找解决方法,最简单的方法似乎是未定义这些AC_INIT预处理器符号,但我没有找到一种方法来实现此目的。

configure.ac:

AC_INIT([minizip], [1.2.8], [bugzilla.redhat.com])
AC_CONFIG_SRCDIR([minizip.c])
AM_INIT_AUTOMAKE([no-define foreign])
LT_INIT
...

正在寻找快速的解决方法,谢谢!

2 个答案:

答案 0 :(得分:0)

目前,我使用下一种解决方法:

AC_CONFIG_COMMANDS([quickfix], [sed -i 's/minizip\\\ 1.2.8/minizip-1.2.8/g' Makefile])
AC_OUTPUT

如果知道的话,请发布更好的解决方案。

答案 1 :(得分:0)

-DFOO=bar定义列表过长时,请autoconf将所有这些定义写入单个头文件(通常称为config.h):

AC_INIT([pkg], [1.2.3], [bugs@example.com])
AC_CONFIG_HEADERS([internal/config.h])

缺点是,现在您需要在最顶层附近的所有编译单元中明确地#include "config.h",以便以后的#ifdef能够正常工作。

另外,请确保您现在运行的是autoreconf而不是autoconf,因为autoreconf会调用自动标头来维护与您的config.h.in相对应的config.h文件必要时归档。 (我几乎总是使用autoreconf -vis .

如果您在编写库,请确保公共接口的头文件请勿包含库的config.h文件,因为这将导致与使用该文件的任何其他软件包的名称冲突config.h

有关以下主题的Autoconf信息文档:Configuration Header Files