在工作中, 遇到一个奇怪的问题: 在terminal, gcc 编译一些代码可以通过, echo $? 回显0, 但将gcc编译命令用包装到tcl脚本后,运行却崩掉了. 一直以为代码有问题, 做完代码精简,才发现tcl对gcc编译子过程的调用有问题. 实在没琢磨透为什么, 只能在tcl脚本中加入catch 捕捉异常,然后解析gcc的编译报告,再决定是否报错.
---------------------------------
$ gcc -c test.cpp
test.cpp:3:54: note: ...
("i tell you something are not right")
^
$ echo $?
0
--------------------------------
包装到tcl脚本后:
--------------------------------------------------
$ cat c.tcl
exec /usr/bin/gcc -c test.cpp
$ tclsh c.tcl
test.cpp:3:54: note:
("i tell you something are not right")
^
while executing
"exec /usr/bin/gcc -c test.cpp "
(file "c.tcl" line 1)
$ echo $?
1
------------------------------------------------
解决办法:
将c.tcl 中做以下修改:
1. catch {exec /usr/bin/gcc -c ts.cpp | tee gcc.log} r
2. 解析gcc.log然后解析内容输出. 当然, 在上一句可以将gcc编译输出重定向到屏幕输出, 这里只做判断是否终止的工作.