ifdef等效于TCL
答
除了标准的“if”语句外,没有内置于Tcl的内容等同于“ifdef”。如果你不喜欢标准的“if”语句,tcl给你所有的基本构建块来创建你自己的“ifdef”命令。
例如,ifdef实际上只不过是查找定义值的if语句而已。一个非常简单的实现可能是这个样子:
proc define {name value} {
set ::defined($name) $value
}
proc ifdef {name script1 else script2} {
if {[info exists ::defined($name)]} {
uplevel $script1
} else {
uplevel $script2
}
}
然后,您可以使用这样的:
define FOO 1
...
ifdef FOO {
<do this if FOO is defined>
} else {
<do this if FOO is NOT defined>
}
答
如果你尝试检查一个环境现状变量,你可以这样做:
if {[info exists ::env(PROJ_FOO)]} {
set_lib x
} else {
set_lib y
}
假设你有一些Tcl命令叫set_lib
。
+0
set_lib是一个特定于工具的命令。看起来唯一的办法就是设置一个ENV变量,就像在SHELL编程语言中一样。我在想是否有任何命令行选项来选择性地运行代码。 tcl -f foo.tcl -define PROJ_FOO(避免设置ENV变量) – Mike 2014-11-25 23:45:46
答
看看[信息存在的varName]和类似。例如:
如果{[信息存在myVar的]!} {放“myVar的是未定义所以在这里把它定义”}
多一点打字,但很明显发生了什么事,可以用在任何信息可以检查。
不,你想做什么? – Kevin 2014-11-24 22:34:33
基于一个特定的项目,我可能需要将命令更改为支持TCL语言芯片设计的工具。例如,'ifdef PROJ_FOO set_lib x'else set_lib y'endif - 这是意图 – Mike 2014-11-24 22:44:32
http://www.gnu.org/software/m4/ – Kevin 2014-11-24 22:46:39