android NDK的android.mk檔案的詳解

來源:互聯網
上載者:User

LOCAL_PATH := $(call my-dir)</p><p>include $(CLEAR_VARS)</p><p>LOCAL_MODULE := tun</p><p>LOCAL_SRC_FILES := tunemu.c tun.c</p><p>LOCAL_CFLAGS := /<br />-I/home/xuxin/mylib/android-platform_external_libpcap/jni</p><p>LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lpcap -L/home/xuxin/mylib/android-platform_external_libpcap/libs/armeabi</p><p>include $(BUILD_SHARED_LIBRARY)<br />

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)

 

 IMPORTANT NOTE: Due to the way GNU Make works, this really returns
    the path of the *last* *included* *Makefile* during the parsing of
    build scripts. Do not call my-dir after including another file.

 

大意是:基於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檔案的存放路徑

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.