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檔案的存放路徑。
相關文章
- Nginx的配置檔案詳解Nginx
- vim的配置檔案詳解
- Android Studio 已有專案新增NDK支援(mac/ndk-build)AndroidMacUI
- linux的啟動配置檔案inittab檔案詳解Linux
- Tomcat 的 Server 檔案配置詳解!!!TomcatServer
- mysql的日誌檔案詳解MySql
- android ndk整合Android
- Maven的pom.xml檔案詳解MavenXML
- Dockerfile檔案詳解Docker
- mtl檔案詳解
- LD檔案詳解
- ZooKeeper系列(4):ZooKeeper的配置檔案詳解
- 詳解Linux指令與檔案的搜尋Linux
- Android NDK初識Android
- 【詳細】關於Android上傳檔案的幾種方式Android
- Android學習筆記之AndroidManifest.xml檔案解析(詳解)Android筆記XML
- haproxy配置檔案詳解
- JavaScript 檔案物件詳解JavaScript物件
- Class 檔案格式詳解
- redis配置檔案詳解Redis
- Scala檔案操作詳解
- redis 配置檔案詳解Redis
- java class檔案詳解Java
- Dockerfile檔案全面詳解Docker
- Android NDK祕籍--初識NDK、JNI、Makefile/CMakeAndroid
- 詳解 Linux 中的虛擬檔案系統Linux
- 3D中的OBJ檔案格式詳解3DOBJ
- android NDK c++ libraryAndroidC++
- Ndk 初步開發 In AndroidAndroid
- JNI初步(五)jni ndk 一個.so檔案依賴另一個.so檔案的寫法
- MachO 檔案結構詳解Mac
- git config配置檔案詳解Git
- Linux 檔案系統詳解Linux
- managed-schema 檔案詳解
- Linux檔案系統詳解Linux
- influx詳解(二):配置檔案UX
- Docker Compose 配置檔案詳解Docker
- Android中讀取assets目錄下的檔案詳細介紹Android
- 一個 java 檔案的執行過程詳解Java