在 shell 脚本中传递变量以生成 CFLAGS?
Pass variable to make CFLAGS in shell script?
我正在尝试通过 shell 脚本使用 gnu make (4.1) 构建一些 c 程序。我想使用从文件中读取的不同 CFLAGS 参数。该文件包含如下行:
"-O1 -freorder-functions"
我正在尝试做类似
的事情
while read line
do
opts="$line"
make CFLAGS="$opts"
done <
但我所有的尝试都以以下错误告终:
cc1: error: argument to ‘-O’ should be a non-negative integer, ‘g’, ‘s’ or ‘fast’
所以我尝试将文件的内容更改为仅在-O1 (-freorder-functions) 之后的参数,并在shell 脚本中添加-O1:
opts=$(printf "\"-O%d %s\"", 1, "$line")
(还有很多其他看起来不太明智的事情)但我仍然收到相同的错误消息。
在 shell 脚本中对参数进行硬编码工作正常:
make CFLAGS="-O1 -freorder-functions"
抱歉,如果这是一个愚蠢的问题,但我似乎无法找到任何此类操作的示例,而且我是 shell 脚本编写的新手,所以我真的不知道了解它如何处理此处的变量。我试图传递给 CFLAGS 的回声对我来说没问题。
在文件中的标志周围加上双引号,并且您尽职尽责地正确引用了您的 shell 变量,您的 make
调用最终成为
make CFLAGS="\"-O1 -freorder-functions\""
也就是flags里面加双引号。这一直传递到编译器调用,这意味着编译器调用类似于
cc "-O1 -freorder-functions" -c foo.c
...要求编译器使用优化级别 1 -freorder-functions
,它抱怨说那是无效的。
为了解决这个问题,我将从文件中删除引号。您也可以将 opts=$line
与 $line
不加引号一起使用,但这并不完全安全。
我正在尝试通过 shell 脚本使用 gnu make (4.1) 构建一些 c 程序。我想使用从文件中读取的不同 CFLAGS 参数。该文件包含如下行:
"-O1 -freorder-functions"
我正在尝试做类似
的事情while read line
do
opts="$line"
make CFLAGS="$opts"
done <
但我所有的尝试都以以下错误告终:
cc1: error: argument to ‘-O’ should be a non-negative integer, ‘g’, ‘s’ or ‘fast’
所以我尝试将文件的内容更改为仅在-O1 (-freorder-functions) 之后的参数,并在shell 脚本中添加-O1:
opts=$(printf "\"-O%d %s\"", 1, "$line")
(还有很多其他看起来不太明智的事情)但我仍然收到相同的错误消息。
在 shell 脚本中对参数进行硬编码工作正常:
make CFLAGS="-O1 -freorder-functions"
抱歉,如果这是一个愚蠢的问题,但我似乎无法找到任何此类操作的示例,而且我是 shell 脚本编写的新手,所以我真的不知道了解它如何处理此处的变量。我试图传递给 CFLAGS 的回声对我来说没问题。
在文件中的标志周围加上双引号,并且您尽职尽责地正确引用了您的 shell 变量,您的 make
调用最终成为
make CFLAGS="\"-O1 -freorder-functions\""
也就是flags里面加双引号。这一直传递到编译器调用,这意味着编译器调用类似于
cc "-O1 -freorder-functions" -c foo.c
...要求编译器使用优化级别 1 -freorder-functions
,它抱怨说那是无效的。
为了解决这个问题,我将从文件中删除引号。您也可以将 opts=$line
与 $line
不加引号一起使用,但这并不完全安全。