autoconf / automake / libtool - как отменить определение PACKAGE_NAME, PACKAGE_TARNAME, PACKAGE_VERSION и т. д. - PullRequest
0 голосов
/ 05 сентября 2018

Журнал сборки:

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

Проблема в 3-й строке: "-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 голосов
/ 05 декабря 2018

Когда список -DFOO=bar определений становится слишком длинным, пусть autoconf записывает все эти определения в один заголовочный файл (обычно называемый config.h):

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

Недостаток в том, что теперь вам нужно явно #include "config.h" во всех ваших единицах компиляции около самого верха, чтобы более поздние #ifdef s могли работать должным образом.

Кроме того, убедитесь, что вы используете autoreconf вместо autoconf сейчас, так как autoreconf будет вызывать autoheader для поддержки файла config.h.in, соответствующего вашему config.h файлу, когда это необходимо. (Я почти всегда использую autoreconf -vis .)

Если вы пишете библиотеку, убедитесь, что заголовочные файлы для общедоступного интерфейса НЕ включают файл config.h вашей библиотеки, поскольку это вызовет конфликт имен с любым другим пакетом, использующим config.h!

Документация Autoconf info по теме: Файлы заголовков конфигурации

0 голосов
/ 07 сентября 2018

Пока я использую следующий обходной путь:

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

Пожалуйста, опубликуйте лучшее решение, если вы знаете.

...