请问 make clean 可以根据 target 名来 clean 吗?

2019-08-26 14:31:49 +08:00
 amiwrong123
现在不管编译整个项目,还是编译某个模块,都是在项目的根目录执行 make 或者 make targetname。

但修改某个模块代码后,不想先 make clean 再 make targetname,因为这样不仅删除掉了修改模块生成的文件,而且也删除掉了其他没有变化的模块生成的文件。这样就会花费更多不必要的时间。

所以,现在想请问各位,有没有办法使得 make clean 可以根据 target 名来 clean ?
12620 次点击
所在节点    Android
15 条回复
vitodongdong
2019-08-26 16:23:39 +08:00
如果 make 耗时差别不大的话,我觉得没必要根据你说的 target 来 clean
momocraft
2019-08-26 16:30:38 +08:00
正确使用时 make target 应该不会重新生成不需要的中间文件

如果不正确则 make 也无从知道 clean target 要做的事的下限(显然删掉所有中间文件是上限)
forcecharlie
2019-08-26 16:39:37 +08:00
添加
```makefile
targetclean:
-rm some/target/file
```

```
make targetclean
make
```

实际上如果处理好 makefile target 的依赖,是不需要 make clean 再构建的。
amiwrong123
2019-08-26 16:46:28 +08:00
@vitodongdong
我这很慢啊,全编得要一晚上==
amiwrong123
2019-08-26 16:50:28 +08:00
@momocraft
主要吧,make target 不会把上一次生成的文件做什么处理,但这个可能会造成一些问题(比如链接到某个不应该存在的文件,本来本地编译应该出错的,但却因为这个不应该存在的文件而通过了编译)。

最笨的就是,去手动删除这个 target 生成的文件。
amiwrong123
2019-08-26 16:53:24 +08:00
@forcecharlie
就是相当于 mk 里,执行了 rm 呗。
刚才试了命令 make clean-targetname,发现好使,可以把 out/target/common 和 out/target/product 里的对应文件夹删除掉
koebehshian
2019-08-26 19:56:33 +08:00
@amiwrong123 "make target 不会把上一次生成的文件做什么处理,但这个可能会造成一些问题",
那说明 Makefile 写得有问题,那只能自己去改 Makefile 文件了
hardwork
2019-08-26 20:22:15 +08:00
修改了你直接 make 就可以了,干嘛要先 makeclean?
想要 make clean target 你自己在 make file 里加规则
amiwrong123
2019-08-26 20:27:15 +08:00
@koebehshian
这个有问题指的是,路径有变动。
比如,原来源文件路径下有 A,B,C 三个文件,对应 out 的某个文件夹下有 A,B,C 三个生成文件。
现在源文件路径变为了 dict/A,B,C ( dict 文件夹下有三个文件),但对应的 out 的某个文件夹下有 A,B,C,dict/A,B,C.。即没有把上一次生成的在外面的 A,B,C 删除掉,但它们不应该存在。

这种是 Makefile 写得有问题吗
zhangfei
2019-08-26 20:31:26 +08:00
编译的 ROM 吗?
Android2MCU
2019-08-26 21:33:33 +08:00
mmm module -B 怎么样?
koebehshian
2019-08-26 22:14:47 +08:00
@amiwrong123 makefile 的本质是编译脚本,只不过通过比较修改时间,决定需不需要重新编译. makefile 太灵活了, 所以具体用法只有看过 makefile 才明白
no1xsyzy
2019-08-27 09:43:11 +08:00
@amiwrong123 文件结构都变了就不要指望 make 解决了吧……
而且你大概是 rm -rf out ?本来这就是偷懒用法,正经办法是
rm out/A
rm out/B
rm out/C
rm -f out
因为你不知道除了 ABC 以外是否有一些用户文件在里面
julyclyde
2019-08-27 12:27:13 +08:00
clean 就是一个 target
make clean 并不是一个“神奇的”动作
SuiXing
2019-08-27 12:46:17 +08:00
话说 刚开始玩 都不知道怎么圈人啊

mmm module -B 现在不能用咯

可以换成 mmma module

其实签名很多大大都说了 找到对应的额中间文件 rm 了就完事了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/595192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX