1

我有一个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
4

1 回答 1

2

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

采用:

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 ...)?

于 2013-10-28T16:08:46.067 回答