使用 shell 变量传递选项时自动工具配置错误
autotools configure error when passing options using shell variable
我希望从这样的 bash 脚本调用配置命令(编译 nginx):
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 引用替换问题。
它将像这样工作:
$ 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"
只通过一次,将失败。
我希望从这样的 bash 脚本调用配置命令(编译 nginx):
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 引用替换问题。
它将像这样工作:
$ 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"
只通过一次,将失败。