android NDK的android.mk檔案的詳解
1 LOCAL_PATH必須位於Android.mk檔案的最開始。它是用來定位原始檔的位置,$(call my-dir)的作用就是返回當前目錄的路徑。
include$(CLEAR_VARS)的作用是清除一些變數的值,但是LOCAL_PATH除外。
LOCAL_MODULE是用來指定當前待編譯模組的名稱,在示例中的模組名稱為hello-jni
LOCAL_SRC_FILES是用來指定參與編譯的原始碼檔案。這裡只編譯hell0-jin.c
include$(BUILD_SHARED_LIBRARY)是用來指示將當前模組編譯為共享庫,字首為lib,字尾為.so。
還有另外一個BUILD_STATIC_LIBRARY,是用來指示將當前模組編譯為靜態庫的,字首為.a,字尾為.a。
這就是一個最簡單的Android.mk的結構。可能還有另外一點需要介紹:
2、定義多個Android.mk檔案。
有的時候,需要編譯的模組比較多,我們可能會將對應的模組放置在相應的目錄中,這樣,我們可以在每個目錄中定義對應的Android.mk檔案(類似於上面的寫法),最後,在根目錄放置一個Android.mk檔案,內容如下:
include$(call all-subdir-makefiles)
只需要這一行就可以了,它的作用就是包含所有子目錄中的Android.mk檔案
3、也可以在一個Android.mk檔案裡包含多個模組。
很直觀的想法就是將第一個Android.mk檔案的內容複製一份,然後修改。我最開始也是這樣做的,但是後來出現問題了,在第二個模組中的原始碼找不到,最後還是看文件,發現裡面已經有示例解釋了:
LOCAL_PATH := $(call my-dir)
IMPORTANTNOTE: Due to the way GNU Make works, this really returns
the path of the *last* *included* *Makefile* during theparsing of
build scripts. Do not call my-dir after including anotherfile.
大意是:基於GNU make的工作方式,$(call my-dir)會返回在解析build指令碼時,遇到的最後一個 include中涉及的目錄。
所以,很多時候,在這個Android.mk裡面只需要呼叫一次$(call my-dir)就夠了,如果所有的原始檔都在一個目錄中。
如果需要的話,可以在第一次呼叫call my-dir的時候,將值儲存下來,比如:
MY_LOCAL_PATH :=$(call my-dir)
LOCAL_PATH :=$(MY_LOCAL_PATH)
然後,在另外一個模組中,繼續如下定義:
LOCAL_PATH:= $(MY_LOCAL_PATH)
4,有時候我們需要引入第三方庫檔案,就需要配置
LOCAL_CFLAGS :=/
-I/home/xuxin/mylib/android-platform_external_libpcap/jni
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lpcap-L/home/xuxin/mylib/android-platform_external_libpcap/libs/armeabi
這兩個變數,LOCAL_CFLAGS := 主要是引用外部的C標頭檔案, -I 是標頭檔案的存放路徑,如果該標頭檔案和我們自己的原始檔放在同一級目錄,則不需要配置;
LOCAL_LDLIBS := 是引用外部庫檔案,-L是指定該lib檔案的存放路徑。
相關文章
- Android.mk各種檔案編譯彙總Android編譯
- Android的.so檔案詳細解讀Android
- Android中音樂檔案的資訊詳解Android
- Android Studio ndk-Jni開發詳解Android
- Android.mk使用Android
- jni和ndk詳解
- Nginx的配置檔案詳解Nginx
- vim的配置檔案詳解
- Android.mk內的變數定義Android變數
- android 混淆檔案proguard.cfg詳解Android
- Android.mk簡介Android
- Android.mk介紹Android
- mysql的日誌檔案詳解MySql
- Android逆向之旅---SO(ELF)檔案格式詳解Android
- Android.mk 用法介紹Android
- Android Resources 資原始檔的使用詳解Android
- linux的啟動配置檔案inittab檔案詳解Linux
- Maven的pom.xml檔案詳解MavenXML
- Tomcat 的 Server 檔案配置詳解!!!TomcatServer
- resin配置檔案的詳細解釋
- Dockerfile檔案詳解Docker
- mtl檔案詳解
- cmake檔案詳解
- BMP檔案詳解
- Android中的NDK總結Android
- Android Studio 已有專案新增NDK支援(mac/ndk-build)AndroidMacUI
- 使用NDK編譯含JNI的Android專案常見問題解決方案編譯Android
- ZooKeeper系列(4):ZooKeeper的配置檔案詳解
- Java對各種檔案的操作詳解Java
- Struts2的properties配置檔案詳解
- NDK問題 : Javah 生成.h檔案Java
- Android NDKAndroid
- java class檔案詳解Java
- JavaScript 檔案物件詳解JavaScript物件
- redis 配置檔案詳解Redis
- Class 檔案格式詳解
- haproxy配置檔案詳解
- Scala檔案操作詳解