请问 make clean 可以根据 target 名来 clean 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX    Android

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

  •  
  •   amiwrong123 2019-08-26 14:31:49 +08:00 15288 次点击
    这是一个创建于 2237 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在不管编译整个项目,还是编译某个模块,都是在项目的根目录执行 make 或者 make targetname。

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

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

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

    ```
    make targetclean
    make
    ```

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

    最笨的就是,去手动删除这个 target 生成的文件。
    amiwrong123
        6
    amiwrong123  
    OP
       2019-08-26 16:53:24 +08:00
    @forcecharlie
    就是相当于 mk 里,执行了 rm 呗。
    刚才试了命令 make clean-targetname,发现好使,可以把 out/target/common 和 out/target/product 里的对应文件夹删除掉
    koebehshian
        7
    strong>koebehshian  
       2019-08-26 19:56:33 +08:00
    @amiwrong123 "make target 不会把上一次生成的文件做什么处理,但这个可能会造成一些问题",
    那说明 Makefile 写得有问题,那只能自己去改 Makefile 文件了
    hardwork
        8
    hardwork  
       2019-08-26 20:22:15 +08:00 via Android
    修改了你直接 make 就可以了,干嘛要先 makeclean?
    想要 make clean target 你自己在 make file 里加规则
    amiwrong123
        9
    amiwrong123  
    OP
       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
        10
    zhangfei  
       2019-08-26 20:31:26 +08:00 via Android
    编译的 ROM 吗?
    Android2MCU
        11
    Android2MCU  
       2019-08-26 21:33:33 +08:00 via iPhone
    mmm module -B 怎么样?
    koebehshian
        12
    koebehshian  
       2019-08-26 22:14:47 +08:00
    @amiwrong123 makefile 的本质是编译脚本,只不过通过比较修改时间,决定需不需要重新编译. makefile 太灵活了, 所以具体用法只有看过 makefile 才明白
    no1xsyzy
        13
    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
        14
    julyclyde  
       2019-08-27 12:27:13 +08:00
    clean 就是一个 target
    make clean 并不是一个“神奇的”动作
    SuiXing
        15
    SuiXing  
       2019-08-27 12:46:17 +08:00
    话说 刚开始玩 都不知道怎么圈人啊

    mmm module -B 现在不能用咯

    可以换成 mmma module

    其实签名很多大大都说了 找到对应的额中间文件 rm 了就完事了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2424 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:33 PVG 23:33 LAX 08:33 JFK 11:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86