Android.mk文件编写
Android.mk文件編寫的例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
inlcude $(BUILD_SHARED_LIBRARY)
解析:
每個Android.mk文件必須以LOCAL_PATH開始,指定項目的根路徑,用于在開發tree中查找源文件
宏my-dir則由Build System提供,返回當前Android.mk文件的路徑
CLEAR_VARS變量由Build System提供,并指向一個指定的GNU Makefile,由它清理各種LOCAL_xxx變量(因為所有的編譯控制文件由同一個GNU make解析和執行,這些變量都是全局的,所以清理后才能避免相互影響),比如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES等,但是不清理LOCAL_PATH。
LOCAL_MODULE模塊必須定義,表示Android.mk中的每一個模塊,名字必須唯一不包含空格,Build System會自動添加適當的前綴和后綴,比如,自己要產生動態庫且命名為foo,則生成后名字會變為libfoo.so,但如果自己定義名字為libfoo,則不加前綴,為libfoo.so
?
LOCAL_SRC_FILES變量必須要有,后面接需要編譯的源碼,如C/C++源碼,可以不列出頭文件,Build System會自動幫我們找出依賴文件
?
BUILD_SHARED_LIBRARY是Build System提供的一個變量,指向GNU Makefile Script,它負責收集自從上次調用include $(CLEAR_VARS)后的所有LOCAL_xxx變量,并決定編譯為什么
BUILD_STATIC_LIBRARY:編譯為靜態庫
BUILD_SHARED_LIBRARY:編譯為動態庫
BUILD_EXECUTABLE:編譯為Native C可執行程序
BUILD_JAVA_LIBRARY:編譯一個jar包(jar包就是一個zip格式的壓縮包),里面是dex格式的文件,導入eclipse不可用
BUILD_STATIC_JAVA_LIBRARY:同上也是編譯一個jar包,但是里面每個java文件對新的class文件都單獨存在,可以導入eclipse使用
?
include $(CLEAR_VARS) 和 include $(BUILD_PACKAGE)是一對,表示一個編譯模塊,編譯模塊中間的內容沒有先后順序,一個Android.mk文件中可以編寫多個編譯模塊。?
?
include $(call first-makefiles-under,$(LOCAL_PATH)) #在項目根目錄下查找所有的mk文件,不包括當前目錄?
LOCAL_STATIC_LIBRARIES := 所需要的靜態庫
LOCAL_SHARED_LIBRARIES := 所需的動態庫
LOCAL_C_INCLUDES := 頭文件所在的路徑
LOCAL_MODULE_TAGS := user(user,eng,tests,optional) #user,表示該模塊只在user版本下進行編譯;optional,表示該模塊可以在所有版本下進行編譯。
#其中,user表示用戶版本,eng(engineering)表示工程版本,tests表示測試版本
LOCAL_CFLAGS += -fno-access-control 獲取訪問私有的權限
-wno-unused-parameter 取消函數參數未使用的警告
轉載于:https://www.cnblogs.com/chen-cai/p/9355612.html
總結
以上是生活随笔為你收集整理的Android.mk文件编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言建立有向图的邻接表及其遍历操作
- 下一篇: 702:Crossing River (