shell - Makefile 如何在删除所有其他目标文件和可执行文件时不删除一个特定的目标文件?
问题描述
现在我有这个命令: ,它通过在我的 shell 中rm -f *.x *.o
调用来删除所有的目标文件和可执行文件。make clean
但是我有一个特定的目标文件,说a.o
我不想删除。我怎么能在不硬编码的情况下做到这一点?请注意,我只能在 C90 下实现它,因为这是一个作业。
解决方案
首先,不要在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
.
推荐阅读
- react-native - 嵌套导航不适用于本机反应
- android - 如何解决 Android 10 上的 KeyStoreConnectException?
- android - Android 对话框显示进度阶段并取消
- perl - 如何使用 perl 中的私钥和密码通过 sftp 连接?
- c# - Azure WebJobs:不推荐使用 Microsoft.Tpl.Dataflow
- java - Spring Boot gradle 多模块应用
- sql-server - 在函数中选择 LinkedServer
- reactjs - Axios.delete(url[,config]):类型与类型“AxiosRequestConfig”没有共同的属性
- json - 比较和更新 Json 数组
- css - 如何为 angular8 中不是列表的变量的变化设置动画?