1. 程式人生 > >android.mk 詳解 其他makefile檔案類似

android.mk 詳解 其他makefile檔案類似

關於libs資料夾和obj資料夾

obj下的是帶符號和除錯資訊的,所以就大很多,靜態庫也在這個裡面。
lib下的是就去去掉這些龐大資訊後的庫檔案,而且是動態連結的庫。

方便在Android.mk中定義自己的變數,我們建議使用MY_字首

一、單個android.mk檔案

LOCAL_PATH := $(call my-dir)   
提示當前檔案的路徑,必須定義在檔案開頭
 my-dir 返回當前Android.mk所在的目錄路徑。

include $(CLEAR_VARS)
清除一些變數的值,但是LOCAL_PATH除外

LOCAL_MODULE
指定當前待編譯模組名字,名字必須唯一,且不能含有空格,必須定義在
$(BUILD_XXXX)前面.
LOCAL_SRC_FILES:= foo.c \
toto/bar.c \
bar.c.arm
指定參與編譯的原始碼檔案,路徑是相對於LOCAL_PATH
bar.c.arm 這樣就告訴系統總是將bar.c以arm (32位 )的模式編譯
這個斜槓 \ 表示這一行與下一行連在一起,tmd,害的老子編譯半天


LOCAL_CPP_EXTENTION := .cxx
這是一個可選變數,用來指定C++程式碼檔案的副檔名,預設是'.cpp',但是你可以改變為
.cxx

LOCAL_ARM_MODE: = arm
預設情況下,arm目標二進位制會以thumb的形式生成(16位),如果你希望你的module是
以32位指令的形式,你可以通過設定這個變數為arm。

include $(BUILD_STATIC_LIBRARY)
是用來指示將當前模組編譯為靜態庫的,字首為.a,字尾為.a。

include $(BUILD_SHARED_LIBRARY)
是用來指示將當前模組編譯為共享庫,字首為lib,字尾為.so。

include $(BUILD_EXECUTABLE)表示編譯成可執行程式

二、多個android.mk檔案
將對應的模組放置在相應的目錄中,在每個目錄中定義對應的Android.mk檔案(類似於
上面的寫法),最後,在根目錄放置一個Android.mk檔案,內容如下:
 include $(call all-subdir-makefiles) 
只需要這一行就可以了,它的作用就是包含所有子目錄中的Android.mk檔案
all-subdir-makefiles: 返回一個位於當前'my-dir'路徑的子目錄列表。例如,看下面
的目錄層次:
sources/foo/Android.mk

sources/foo/lib1/Android.mk

sources/foo/lib2/Android.mk    

如果sources/foo/Android.mk包含一行:
include $(call all-subdir-makefiles)    
那麼它就會自動包含sources/foo/lib1/Android.mk 和sources/foo/lib2/Android.mk。
在預設情況下,NDK將會只搜 索在sources/*/Android.mk中的檔案。

最好不要再一個android.mk中定義多個模組,否則可能出現目錄方面的 問題

三、引入第三方庫


LOCAL_STATIC_LIBRARIES: 應該連結到這個模組的靜態庫列表(使用BUILD_STATIC_LIBRARY生成),這僅僅對共享庫模組才有意義

LOCAL_SHARED_LIBRARIES: 這個模組在執行時要依賴的共享庫模組列表,在連結時需要,在生成檔案時嵌入的相應的資訊。注意:這不會附加列出的模組到編譯圖,也就是,你仍然需要在 Application.mk中把它們新增到程式要求的模組中。




LOCAL_CFLAGS := /
-I/home/xuxin/mylib/android-platform_external_libpcap/jni
LOCAL_CFLAGS := 主要是引用外部的C標頭檔案, 在編譯C程式碼檔案的時候使用,-I 是標頭檔案的存放路徑,如果該標頭檔案和我們自己的原始檔放在同一級目錄,則不需要配置;

LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS

-D 表示定義一個巨集,類似於#define  __STDC_CONSTANT_MACROS

-Werror是編譯警告也作為錯誤資訊


LOCAL_CPPFLAGS與LOCAL_CFLAGS一樣,但是對C 和C++ source files都適用

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lpcap -L/home/xuxin/mylib/android-platform_external_libpcap/libs/armeabi
LOCAL_LDLIBS := 是引用外部庫檔案,-L是指定該lib檔案的存放路徑
例如,下面將告訴連結器生成的模組要在載入時刻連結到 /system/lib/libz.so   
LOCAL_LDLIBS := -lz

常常需要在自己的C程式碼裡連結第三方提供的庫檔案,例如以.a檔案提供。此時需要修改Android.mk檔案來加進需要連線的庫。LOCAL_LDLIBS不是做這個的,一個可行的方法是使用LOCAL_LDFLAGS通知編譯器。例如

LOCAL_LDFLAGS -L$(LOCAL_PATH) -lxxxx

其中xxxx是被連結模組的名字,不含字尾和字首lib

注意-L後面使用相對路徑似乎不行。

(務必注意引數的順序)


關於libs資料夾和obj資料夾

obj下的是帶符號和除錯資訊的,所以就大很多。
lib下的是就去去掉這些龐大資訊後的動態連結庫檔案。

相關推薦

android.mk 其他makefile檔案類似

關於libs資料夾和obj資料夾 obj下的是帶符號和除錯資訊的,所以就大很多,靜態庫也在這個裡面。lib下的是就去去掉這些龐大資訊後的庫檔案,而且是動態連結的庫。 方便在Android.mk中定義自己的變數,我們建議使用MY_字首 一、單個android.mk檔案

ndk開發中的Android.mk檔案與Application.mk及例項

Android.mk檔案的作用: An Android.mk file is written to describe your sources to the build system. 中文意思是:寫一個Android.mk檔案是為了向生成系統描述你的原始碼。

Android WebView檔案下載

1、佈局檔案activity_main.xml:線性佈局,TextView顯示頁面標題,WebView顯示頁面。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android -------- WIFI

mov 取ip地址 fico alt b- else if 無線網 pan PC 今天簡單的來聊一下安卓開發中的Wifi,一些常用的基礎,主要分為兩部分: 1:WiFi的信息 2:WiFi的搜索和連接 現在app大多都需要從網絡上獲得數據。所以訪問網絡是在

Android Permission

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android ViewModel

1. ViewModel概述 2. 實現一個ViewModel 3. ViewModel的生命週期 4. 在fragments之間共享資料 5. ViewModel替換Loaders 6. 附加資源 1.

Android LiveData

官方文件翻譯 1.LiveData概述 1.1 使用LiveData的優點 1.2 使用LiveData物件 1.2.1 建立LiveData物件 1.2.2 觀察LiveData物件

Android Lifecycle(一)

官方文件翻譯 使用生命週期感知元件處理生命週期 Lifecycle Event State LifecycleOwner 實現一個自定義的LifecycleOwner 生命週期感

Android Animation

關於動畫的實現,Android提供了Animation,在Android SDK介紹了2種Animation模式: 1. Tween Animation:通過對場景裡的物件不斷做影象變換(平移、縮放、旋轉)產生動畫效果,即是一種漸變動畫; 2. Frame Animation:

Android開發之onTouch和onClick

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android UI之顏色資源的使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android開發--ContentProvider/Cursor的使用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android Activity

生命週期 如上圖所示,Activity生命週期很簡單共七個生命週期函式,oncreate(),onrestart(),onstart(),onresume(),onpause(),onstop(),ondestroy(); 下面舉兩個例子來說明Activity生命週期函式呼叫關係。

Android Handler

Handler適用於執行緒間互動的一種機制。牽扯到四個類:Handler,Looper,MessageQueue,Message。 這四個類關係如下圖所示: 這個圖自己畫的,比較簡易,但是很能說明他們的關係 Handler:用於執行緒之間傳送訊息,一般Handler在主執行緒中被建

Eclipse整合Android NDK

1        目錄 Eclipse整合Android NDK說明... 1 2       為什麼要用NDK?... 2 3 &nbs

Android-Application

Preface 在學習一個SDK的時候,遇到了Application類的相關知識,其實之前也有學習過Application類的一些知識,但是日常開發中使用頻率不高,忘得差不多了.現在重新來總結下Application的使用 英語基礎好的可以去參考官方文件 官方文件 下面是官網對Application類

0 httpd2.2配置-Apache配置檔案-(二)

httpd-2.2 15 curl命令 curl是基於URL語法在命令列方式下工作的檔案傳輸工具,它支援FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協議。curl支援HTTPS認證,並且支援HTTP的POST、PU

build.gradle 檔案

不用於Eclipse,Android Studio是採用Gradle 來構建專案的。Gradle 是一個非常先進的專案構建工具,它使用了一種基於Groovy 的領域特定語言(DSL)來宣告專案設定,摒棄了傳統基於XML(如Ant和Maven)的各種繁瑣的配置。 專案中有兩個build.gradl

Android RecyclerView RecyclerView的動畫實現(移除、新增、改變、移動)和自定義動畫的實現

一丶新增刪除時候的重新整理問題 先上一下效果圖吧 1.為了方便起見我們還是先新增三個按鈕分別實現新增刪除和改變 2.在Adapter中寫呼叫方法並進行重新整理 public void remove(int position){ list.re

[作業系統資訊]微軟Windows 8檔案替換介面

日前微軟公佈了Windows 8對檔案複製、移動、重新命名等介面的多處改進,此後很多人詢問新的覆蓋檔案時“選擇檔案”對話方塊如何解決檔名衝突問題,微軟今天對這個問題進行了釋疑。在設計的背後,針對檔名衝突時的操作微軟提供了兩個層級的控制:首先也是最主要的,是一種針對所有檔名衝突的簡單的、一鍵解決、批量處理的操作