我有一个makefile用于我的庞大的库,当我修改一些文件但不想编译库并执行make clean
时,首先它将编译所有文件然后执行清理。如何在不进行任何其他修改的情况下进行清洁?
我也使用了
.PHONY:清洁FORCE
清洁:FORCE
rm * .o rm * .mod 力量:
我可以使用以下方法解决我的问题:
ifneq($(MAKECMDGOALS),清洁)
-include $(OBJS:%。o =%。d)
endif
答案 0 :(得分:2)
正如Zhertal所说,至少在没有看到清洁规则的定义的情况下无法确定。这有两种可能性。
首先,您的clean
目标列出了导致重建所有内容的先决条件。这不太可能,但我见过人们之前做过这样的事情。
第二个,更可能的原因是您正在使用GNU make手册中描述的方法来自动生成先决条件,您可以在%.d
模式规则中添加%.o
模式,您-include
所有.d
个文件。这里的问题是make在运行任何目标之前总会尝试确保makefile是最新的 first ,这意味着尝试重建所有包含的.d
文件,这意味着重新编译一切。
您有两种方法可以解决此问题。第一种是将include
行放在条件内,这样如果你说make clean
它就不会运行,如下所示:
ifeq ($(filter clean,$(MAKECMDGOALS)),)
-include $(OBJS:%.o=%.d)
endif
当然,如果您有更多清洁类型规则(distclean
等),则必须进行调整。
另一种方法是重新设计自动生成的makefile以使用更现代,更先进的方法。您可以在Advanced Auto-Dependencies
找到说明