我有这个Makefile:
ZAPPY_SERVER = zappy_server
ZAPPY_AI = zappy_ai
ZAPPY_GUI = zappy_gui
all: $(ZAPPY_SERVER) $(ZAPPY_AI) $(ZAPPY_GUI)
$(ZAPPY_SERVER):
make -C server/ && cp server/zappy_server .
$(ZAPPY_AI):
make -C client/ && cp client/zappy_ai .
$(ZAPPY_GUI):
make -C gui/ && cp gui/zappy_gui .
clean:
make clean -C server/
make clean -C client/
make clean -C gui/
fclean:
make fclean -C server/ && rm $(ZAPPY_SERVER)
make fclean -C gui/ && rm $(ZAPPY_GUI)
make fclean -C client/ && rm $(ZAPPY_AI)
但是,当我拨打make
然后make clean
然后make
时,它会重新链接:
make: Nothing to be done for 'all'.
我想再次编译其他Makefiles的来源。想法怎么做?
答案 0 :(得分:1)
您的clean
规则不会删除文件zappy_server
,zappy_ai
和zappy_gui
。这些文件是all
的先决条件(并且all
规则没有命令),因此第二次请求Make执行all
规则时,Make会告诉您没有任何内容要做。
如果您希望clean
删除这些文件,请在clean
食谱中添加一行:
rm $(ZAPPY_SERVER) $(ZAPPY_AI) $(ZAPPY_GUI)
如果不希望clean
删除这些文件,但您仍希望Make重建它们,一种方法是通过声明这些目标PHONY :
.PHONY: $(ZAPPY_SERVER) $(ZAPPY_AI) $(ZAPPY_GUI)