我正在尝试使用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"
}
Run Code Online (Sandbox Code Playgroud)
这给出了错误
测试以失败结束
make:无法识别的选项`--target_board = atmega128-sim"'
用法:make [options] [target] ...... ......
但是,如果我从RUNTESTFLAGS中删除compile.exp,它可以正常工作.
if {[catch {exec make check RUNTESTFLAGS="--target_board=atmega128-sim"} errmsg ]} {
.....
Run Code Online (Sandbox Code Playgroud)
是因为参数RUNTESTFLAGS中出现双引号吗?我需要使用不同的RUNTESTFLAGS进行make check.请建议一种方法来实现这一目标.
提前致谢 !!
首先,这个问题的核心是:
exec make check RUNTESTFLAGS="compile.exp --target_board=atmega128-sim"
Run Code Online (Sandbox Code Playgroud)
其他一切都只是(正确的)包装.问题是你使用的是上面的Bourne shell语法,而不是Tcl语法,所以上面的结果是RUNTESTFLAGS设置为"compile.exp
(带引号),其余的作为另一个参数发送.不是你想要的!(Tcl只允许双引号字符串从单词的前面开始; bash更宽松.)正确的版本是:
exec make check "RUNTESTFLAGS=compile.exp --target_board=atmega128-sim"
Run Code Online (Sandbox Code Playgroud)
但是将它拆分更容易也更清晰,像这样:
set runTestFlags "compile.exp --target_board=atmega128-sim"
exec make check RUNTESTFLAGS=$runTestFlags
Run Code Online (Sandbox Code Playgroud)