關於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中也是無關的