Передача CFLAGS для настройки через переменную bash - PullRequest
0 голосов
/ 05 февраля 2020

Когда я думаю, что знаю, как работает оболочка, что-то приходит и ставит меня в тупик. Следующие команды были выполнены в GNU bash, версии 3.2.25.

У меня есть несколько ./configure сценариев, которые все совместно используют группу общих параметров конфигурации, одним из которых является CFLAGS.

Для этого у меня есть две переменные

CFLAGS="-fPIC -O3"
COMMON_CONFIGURE_OPTIONS="CFLAGS=\"$CFLAGS\" --enable-static --disable-shared --prefix=$PREFIX"

Когда это передается в `./configure ', это делается так:

"$FOO/configure" $COMMON_CONFIGURE_OPTIONS

Для жизни мне, кажется, я не могу заставить это расширяться правильно. Я попытался вручную подставить значение $CFLAGS в $COMMON_CONFIGURE_OPTIONS. Я пробовал каждую комбинацию одинарных и двойных кавычек под солнцем. Я даже пытался процитировать весь аргумент "CFLAGS = ...".

Версия, которую я дал выше, дает следующее (когда set -x включено)

../configure 'CFLAGS="-fPIC' '-O3"' --enable-static --disable-shared --prefix=../install
configure: error: unrecognized option: `-O3"'
Try `../configure --help' for more information

То, что я ожидал и что я хочу, так это чтобы configure вызывался как

./configure CFLAGS="-fPIC -O3" --enable-static --disable-shared --prefix="$PREFIX"

Как мне добиться того, чего я хочу, и, кроме того, есть хорошие ресурсы / советы о том, как избежать этой проблемы в будущем

1 Ответ

0 голосов
/ 05 февраля 2020

Чтобы достичь того, чего вы хотите, я думаю, вы хотите коренным образом изменить свой подход. Предполагая, что ваши configure сценарии генерируются autoconf, я бы предложил использовать файл config.site. То есть просто сделайте что-то вроде:

mkdir -p $PREFIX/share
echo 'CFLAGS="--enable-static --disable-shared"' > $PREFIX/share/config.site

и затем вызовите configure как:

/path/to/configure --prefix=$PREFIX

Убедитесь, что CONFIG_SITE не установлен в среде при вызове configure, иначе значения по умолчанию придет из файла, названного там.

...