现在我有这个命令: ,它通过在我的 shell 中rm -f *.x *.o调用来删除所有的目标文件和可执行文件。make clean但是我有一个特定的目标文件,说a.o我不想删除。我怎么能在不硬编码的情况下做到这一点?请注意,我只能在 C90 下实现它,因为这是一个作业。
1863 次
1 回答
5
首先,不要在clean:规则(或任何其他规则)中发出通配符删除命令。当用户键入make clean时,他们可能会丢失甚至不受构建系统控制的文件。您的构建系统应该只清理它构建的内容。(也就是说,至少对于“常规强度”clean目标;在这里,我们应该承认提供额外目标的广泛实践,即删除编辑器备份文件tags、生成的配置材料等。)
目标文件应该列在一些变量中,比如$(OBJS)应该使用rm -f ... $(OBJS).
如果某个目标文件不被删除,你可以划分东西:
DISPOSABLE_OBJS = ...
PRECIOUS_OBJS = ...
OBJS = $(DISPOSABLE_OBJS) $(PRECIOUS_OBJS)
然后在clean规则中,只需删除$(DISPOSABLE_OBJS).
在 GNU Make 中,您有额外的灵活性,比如rm -f $(filter-out keep1.o keep2.o,$(OBJS))删除所有$(OBJS)除了keep1.o和keep2.o.
于 2018-11-08T18:50:29.117 回答