如何清洁而不做任何修改?

时间:2014-01-31 14:52:50

标签: makefile

我有一个makefile用于我的庞大的库,当我修改一些文件但不想编译库并执行make clean时,首先它将编译所有文件然后执行清理。如何在不进行任何其他修改的情况下进行清洁?

我也使用了

  

.PHONY:清洁FORCE
  清洁:FORCE
      rm * .o rm * .mod   力量:

我可以使用以下方法解决我的问题:

  

ifneq($(MAKECMDGOALS),清洁)
  -include $(OBJS:%。o =%。d)
  endif

1 个答案:

答案 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

找到说明