1. 程式人生 > 其它 >關於Android.mk 編譯時報unknown target的一些know how

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