Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

autotools configure error when passing options using shell variable

I wish to call configure command (to compile nginx) from a bash script like this:

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

but I got the following error:

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

When I pass the options like:

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

I got no error.

To reproduce:

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}

Results

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

But:

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

it is ok

I think it is not nginx related, but I look to me as bash quote substitution issue.

like image 676
Giovanni Avatar asked Oct 28 '25 07:10

Giovanni


1 Answers

It will work like this:

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

so that the expansion of $CC_OPTS is passed as a single argument to ./configure.

But if you wanted also to pass, maybe:

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

through a variable, you would need:

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

because you need to pass two arguments to ./configure, and:

./configure "$CC_OPTS $LD_OPTS"

passes only one, and will fail.

like image 167
Mike Kinghan Avatar answered Oct 31 '25 01:10

Mike Kinghan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!