关于Android.mk 编译时报unknown target的一些know how

总结一下最近工作中的一些konw how:


 

e.g. 如果目录是如下结构:

external

   | ----- project

              |---- Android.mk

              | --- dirA

      |----Android.mk (module A)

      |--- src.cpp

这种情况下,直接在croot下 make  moduleA是ok的;

然后我试着注释掉project目录下的Android.mk中的内容,

include $(call all-subdir-makefiles)

继续make moduleA, 这个时候就会报unknown target. 我最早期的认知是,需要在project中include指定目录才行,这里也似乎映证了这一点,可是并不是这样的。

当我试着删掉project/Andorid.mk或者换个名字的时候,然后再去make moduleA, 就会发现又可以make成功了。也就是说下面的结构是ok的

external

   | ----- project

              |---- Android.mk

              | --- dirA

      |----Android.mk (module A)

      |--- src.cpp

那么原因是什么呢?

我认为是这样的逻辑,Android的编译系统认为,只要父目录中存在Android.mk, 则忽略其子目录中的Android.mk, make的时候根据父目录的指示去include, 这样可以加快一定的速度,因为可能并不是每个

子目录下的Android.mk都需要make. 所以一旦我只是注释内容,不删掉父目录的Android.mk, 我就会丢掉所有子目录的makefile被include的机会,也就是为什么最后会报unknown target.

一旦我删除了父目录中的Android.mk, 子目录就会被Android的编译系统所解析,无论是mma还是make都是可以的,p.s., 和 是否把这个target加在device.mk中也是无关的

 

posted on 2022-03-17 21:23  疾速瓜牛  阅读(1453)  评论(0编辑  收藏  举报

导航