我正在尝试使用tcl中的驱动程序脚本运行gcc testsuite。 我写的时候
if {[catch {exec make check RUNTESTFLAGS="compile.exp --target_board=atmega128-sim"} errmsg ]} {
puts "Test finished with failures\n $errmsg"
} else {
puts "Test finished"
}
这会产生错误
测试以失败告终
make:无法识别的选项`--target_board = atmega128-sim“'
用法:make [options] [target] ... ......
但是如果我从RUNTESTFLAGS中删除compile.exp,它就可以正常工作。
if {[catch {exec make check RUNTESTFLAGS="--target_board=atmega128-sim"} errmsg ]} {
.....
是否因为参数RUNTESTFLAGS中出现双引号? 我需要使用不同的RUNTESTFLAGS进行make check。 请建议一种方法来实现这一目标。
提前致谢!!
答案 0 :(得分:7)
首先,这个问题的核心是:
exec make check RUNTESTFLAGS="compile.exp --target_board=atmega128-sim"
其他一切都只是(正确的)包装。问题是你使用的是上面的Bourne shell语法,而不是Tcl语法,所以上面的结果是RUNTESTFLAGS设置为"compile.exp
(带引号),其余的作为另一个参数发送。不是你想要的! (Tcl只允许双引号字符串从单词的前面开始; bash更宽松。)正确的版本是:
exec make check "RUNTESTFLAGS=compile.exp --target_board=atmega128-sim"
但这样更容易,并且很多更清楚地将其分开,如下所示:
set runTestFlags "compile.exp --target_board=atmega128-sim"
exec make check RUNTESTFLAGS=$runTestFlags