Ошибка настройки autotools при передаче параметров с использованием переменной оболочки - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу вызвать команду configure (для компиляции nginx) из сценария bash, например:

CONF_OPTS=' --with-cc-opt="-O2 -g"'
./configure ${CONF_OPTS}

, но я получил следующую ошибку:

./configure: error: invalid option "-g"

Когда я передаюварианты, такие как:

./configure --with-cc-opt="-O2 -g"

Я не получил ошибку.

Воспроизвести:

curl -O  http://nginx.org/download/nginx-1.14.2.tar.gz
tar xfz nginx-1.14.2.tar.gz
cd nginx-1.14.2

OPTS='--with-cc-opt="-O2 -g"'
./configure ${OPTS}

Результаты

./configure: error: invalid option "-g""

Но:

./configure --with-cc-opt="-O2 -g"

все в порядке

Я думаю, что это не связано с nginx, но я смотрю на меня как на проблему с заменой цитат bash.

1 Ответ

0 голосов
/ 18 февраля 2019

Это будет работать так:

$ CC_OPTS=--with-cc-opt='-O2 -g'
$ ./configure "$CC_OPTS"

, так что расширение $CC_OPTS передается как один аргумент ./configure.

Но если вы хотите также передать, возможно:

--with-ld-opt='-Wl,-gc-sections -Wl,-Map=mapfile'

через переменную, вам потребуется:

$ CC_OPTS=--with-cc-opt='-O2 -g'
$ LD_OPTS=--with-ld-opt='-Wl,-gc-sections -Wl,-Map=mapfile'
$ ./configure "$CC_OPTS" "$LD_OPTS"

, потому что вам нужно передать два аргумента ./configure и:

./configure "$CC_OPTS $LD_OPTS"

пропустит только один и потерпит неудачу.

...