对于游戏来说,我需要进行大量的纹理处理,这可能需要一些时间,因此我只想重新生成修改过的纹理而不是所有纹理。
我有一个类似于这个结构的makefile(这里简化了示例):
all:\
wall
wall:\
wall/red\
wall/blue\
wall/mixed
wall/%:\
wall/%/top.png\
wall/%/left.png\
wall/%/right.png\
wall/%/down.png\
echo $@ $<
wall/red/%.png:\
.source/wall/model/%.png
convert $< -fill "rgb(255,0,0)" -colorize 15,15,15,0 -level "0%,100%,0.8" $@
wall/blue/%.png:\
.source/wall/model/%.png
convert $< -fill "rgb(0,0,255)" -colorize 15,15,15,0 -level "0%,100%,0.8" $@
wall/black/%.png:\
.source/wall/model/%.png
convert $< -fill "rgb(0,0,0)" -level "0%,100%,0.4" $@
wall/white/%.png:\
.source/wall/model/%.png
convert $< -fill "rgb(255,127,0)" -level "0%,70%,1.2" $@
wall/mixed/%.png:\
wall/white/%.png\
wall/black/%.png\
.source/wall/mask/%.png
convert $(word 1,$^) $(word 2,$^) $(word 3,$^) -composite $@
我的问题是:
wall/%:
echo $@
正在工作(它返回我&#34;墙/红&#34;,&#34;墙/蓝&#34;和&#34;墙/混合&#34;)但是:
wall/%:\
wall/%/top.png\
wall/%/left.png\
wall/%/right.png\
wall/%/down.png\
echo $@
不能正常工作(它回归说没有规则要建立&#34;墙/红&#34;墙壁&#34;墙&#34;)我不知道为什么因为我和已经看过如下规则:
obj/%.o: %.c $(DEPS)
工作正常。
答案 0 :(得分:1)
最有可能wall/%: wall/%/top.png ...
食谱不匹配,因为{{1}中的一些必需文件(top.png
,left.png
,right.png
,bottom.png
)失踪。
为了应用模式规则,其目标模式必须与所考虑的文件名匹配,并且其所有先决条件(在模式替换之后)必须命名存在或可以创建的文件
这是我的测试makefile:
.source/wall/model/
它正在重现这个问题:
# test.mk
wall/%: wall/%/top.png wall/%/bottom.png
@echo running: $@
wall/red/%.png: .source/wall/model/%.png
@echo running: $@
让我们尝试创建$ make -f test.mk wall/red
make: *** No rule to make target `wall/red'. Stop.
:
top.png
仍然无效。另外添加$ mkdir -p .source/wall/model/top.png
$ make -f test.mk wall/red
make: *** No rule to make target `wall/red'. Stop.
:
bottom.png
立即行动!
答案 1 :(得分:1)
int index = 0;
mDatabase.child("data").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
// A new comment has been added, add it to the displayed list
Data data = dataSnapshot.getValue(Data.class);
index++;
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/data/" + dataSnapshot.getKey()+"/index", index);
mDatabase.updateChildren(childUpdates);
}
规则中有一个反斜杠过多。如果你改变了这个:
wall/%
到此:
wall/%:\
wall/%/top.png\
wall/%/left.png\
wall/%/right.png\
wall/%/down.png\
echo $@
它完美无缺。通过额外的反斜杠,您可以告诉Make wall/%:\
wall/%/top.png\
wall/%/left.png\
wall/%/right.png\
wall/%/down.png
echo $@
是规则的先决条件。由于没有名为“echo”的文件,并且makefile无法构建它,因此Make不能将echo
规则用于任何事情。
如果你准备了minimal complete example,你可能很容易发现这个错误。