Как передать флаги компилятора из Autoconf в Automake?

У меня чертовски много времени получается получить опции компилятора из Autoconf в Automake. Некоторые из моих исходных файлов имеют флаги Automake для каждого объекта:

## Makefile.am
librijndael_simd_la_SOURCES = rijndael-simd.cpp
librijndael_simd_la_CXXFLAGS = $(AES_FLAG)

AES_FLAG нужны архитектурные флаги для IA-32, Aarch32/64 и Power8. Другие платформы не получают флаг. Раньше флаги были жестко закодированы в Makefile.am,

Я пытаюсь жестко закодировать параметры в Autoconf, поскольку я строю первоначальную поддержку Autotools:

# configure.ac
AC_SUBST([GCM_FLAG], [-mssse3 -mpclmul])
AC_SUBST([AES_FLAG], [-msse4.1 -maes])
AC_SUBST([SHA_FLAG], [-msse4.2 -msha])
...
AC_OUTPUT(Makefile)

Но это приводит к:

$ ./configure
...

checking how to run the C++ preprocessor... g++ -E
./configure: line 16195: -mpclmul: command not found
./configure: line 16199: -maes: command not found
./configure: line 16201: -msha: command not found

Руководство Autoconf, 3.1.2 Язык Autoconf, говорит использовать двойные скобки ([[ а также ]]):

AC_SUBST([[GCM_FLAG]], [[-mssse3 -mpclmul]])
AC_SUBST([[AES_FLAG]], [[-msse4.1 -maes]])
AC_SUBST([[SHA_FLAG]], [[-msse4.2 -msha]])

В результате (я думаю, именно поэтому большинство людей не следуют инструкции):

$ autoreconf --force --install
...

error: AC_SUBST: `[AES_FLAG]' is not a valid shell variable name
configure.ac:50: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: error: echo failed with exit status: 1
autoreconf: aclocal failed with exit status: 1

Я считаю, что это документация, но она не содержит примеров или шагов по устранению неполадок: 7.2 Установка выходных переменных.

Наивно, я думал, что будут тысячи блогов, показывающих, как выполнить эту простую задачу, но это не так: опция компиляции в autoconf pass для automake.

Как передать флаги компилятора из Autoconf в Automake?

1 ответ

Похоже, что ваша конфигурация верна. Там может быть новая строка или любой другой символ в вашем Makefile.am или же configure.ac файл, который испортит вашу строительную систему.

Советую посмотреть генерацию Makefile, Вы можете сделать grep -nC5 AES_FLAG Makefile чтобы увидеть, как это выглядит. Это может дать нам несколько советов.

Другие вопросы по тегам