现在我有这个命令: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.o
和keep2.o
之外的所有$(OBJS)
。