Makefile如何不删除一个特定的对象文件,同时删除所有其他对象文件和可执行文件



现在我有这个命令:rm -f *.x *.o,它通过调用shell中的make clean来删除所有对象文件和可执行文件。但我有一个特定的对象文件,比如a.o,我不想删除它。如果不硬编码,我怎么能做到这一点?注意,我只能在C90下实现它,因为这是一个赋值。

首先,不要在clean:规则(或任何其他规则(中发出通配符remove命令。当用户键入make clean时,他们可能会丢失甚至不受构建系统控制的文件。您的构建系统应该只清理它构建的内容。(也就是说,至少对于"常规强度"的clean目标;在这里,我们应该承认提供删除编辑器备份文件、tags、生成的配置材料等的附加目标的广泛做法。(

对象文件应该列在一些变量中,如$(OBJS),并且应该使用rm -f ... $(OBJS)删除。

如果某个对象文件不被删除,你可以划分:

DISPOSABLE_OBJS = ...
PRECIOUS_OBJS = ...
OBJS = $(DISPOSABLE_OBJS) $(PRECIOUS_OBJS)

然后在clean规则中,只需删除$(DISPOSABLE_OBJS)即可。

在GNUMake中,您有额外的灵活性,比如rm -f $(filter-out keep1.o keep2.o,$(OBJS)),可以删除除keep1.okeep2.o之外的所有$(OBJS)

最新更新