在tcl脚本中,exec make check RUNTESTFLAGS =“compile.exp --target_board = atmega128-sim”不起作用

时间:2011-07-15 09:46:19

标签: tcl

我正在尝试使用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。 请建议一种方法来实现这一目标。

提前致谢!!

1 个答案:

答案 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