在make规则中执行

时间:2014-05-16 14:58:24

标签: git makefile

是否可以编写一个不评估的make规则,例如$(shell )表达式直到先前的操作被执行?

一个人为的例子:

all : clean
    echo 'hey' > test
    echo $(shell cat test)

clean :
    rm test

然后运行make将导致以下错误:

cat: test: No such file or directory
echo 

问题似乎是make在执行规则之前评估shell命令,因此test尚不存在。这有什么好办法吗?

作为背景,我要做的是编写一个make规则来检查git存储库的不同分支,并以需要评估的方式执行此操作。 $(shell git ls-files);但是在切换分支之前会对git ls-files进行评估。

1 个答案:

答案 0 :(得分:1)

简单的解决方法是使用shell自己的工具。执行规则时,您已经在运行shell命令。

all:
    echo 'hey' >test
    echo $$(cat test)

(用于外壳的美元符号需要加倍,这是在Make中产生文字美元符号的逃避。)

显然可以进一步重构,因为echouseless;但是,我们将其视为有用的占位符。