关于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中也是无关的