检查文件是否从clearcase签出

时间:2013-10-28 15:28:06

标签: makefile clearcase

我有一个makefile,如果这个文件还没有签出,我想在文件上签出:

VAR=$(shell cleartool ls $(HOME)/all_files.tgz | grep CHECKEDOUT)
build:
     @if ["$(VAR)" == ""]; then \
        cleartool co -unres -nc $(HOME)/all_files.tgz;\
     fi
     @ tar czf $(HOME)/all_files.tgz $(OUT)/*.log

如果检出all_files.tgz,我会收到以下错误:

/bin/sh: [/home/ge/prj/all_files.tgz@@/main/10/CHECKEDOUT from /main/10             Rule: CHECKEDOUT: not found

1 个答案:

答案 0 :(得分:2)

当你在shell中使用括号时,你必须在它们周围包含空格。这是因为[实际上是一个单独的命令:如果使用["$(VAR)"扩展为上面引用的字符串([/home/ge/prj/all_files.tgz@@/main/10/CHECKEDOUT from /main/10)并且这不是有效的命令名称。类似地,对于最终]:必须在其周围有空格。

使用:

VAR=$(shell cleartool ls $(HOME)/all_files.tgz | grep CHECKEDOUT)
build:
        @if [ "$(VAR)" == "" ]; then \
            cleartool co -unres -nc $(HOME)/all_files.tgz;\
        fi
        @ tar czf $(HOME)/all_files.tgz $(OUT)/*.log

但这是一种奇怪的规则。由于VAR只是一个shell函数,并且你在shell中使用它,为什么还要费心使用$(shell ...)