mk文件編寫,項目配置樣例

目錄結構
	/hello
	--/include
	    --/lib/lib.h
	--src
	    --/lib/lib.cpp
		--/app/main.cpp
	--build
		--/jni
			--Android.mk
			--Application.mk
			--Apps.mk
			--Include.mk
			--Libs.mk
			--build.sh

如果有多個依賴庫工程,目錄include和src中結構應該是這樣的。

	--/include
		--/lib1/lib1.h
		--/lib2/lib2.h
	--src
		--/lib1/lib1.cpp
		--/lib2/lib2.cpp
		--/app/main.cpp

MK樣例:

#===================================================
#Android.mk
include $(APP_PROJECT_PATH)/Libs.mk
include $(APP_PROJECT_PATH)/Apps.mk

#===================================================

Libs.mk是用來編譯庫工程的腳本文件,Apps.mk是用來配置生成app的腳本文件。

如果有其它三方庫需要編譯,對應的腳本添加到這個文件中,先編譯的順序在前。

#===================================================
#Application.mk
APP_PROJECT_PATH := $(shell pwd)

TARGET_PLATFORM := 'android-14'

APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -frtti

APP_STL := gnustl_static

APP_CFLAGS+=\
	-DANDROID=1\
	-D_GLIBCXX_USE_WCHAR_T=1\

APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/Android.mk

這裏設置APP_STL,指明使用哪個版本的STL,支持以下四種:
system --> 系統默認的最小支持的C++運行時庫
stlport_static --> 以靜態鏈接的方式使用stlport版本的STL
stlport_shared --> 以動態鏈接的方式使用stlport版本的STL
gnustl_static  --> 以靜態鏈接的方式使用gnu版本的STL
#====================================================
編譯的入口文件,指明瞭NDK的版本和要使用的STL版本,不同版本的STL支持的特性不同;

#====================================================
#Apps.mk
LOCAL_PATH:= $(call my-dir)
SRC_PATH_ROOT:=$(LOCAL_PATH)/../../src

include $(CLEAR_VARS)
include $(APP_PROJECT_PATH)/Include.mk # prebuild lib

LOCAL_MODULE := jni-hello

LOCAL_LDLIBS +=../obj/local/$(APP_ABI)/libgnustl_static.a

LOCAL_STATIC_LIBRARIES += \
			\#libtest            \
			libgnustl_static

LOCAL_SHARED_LIBRARIES += libtest

LOCAL_LDFLAGS += \

#find all c files in source dir
local_src_files := $(wildcard $(SRC_PATH_ROOT)/app/*.cpp)

#remove parent path of all c files in source dir
local_src_files := $(local_src_files:$(LOCAL_PATH)/%=%)

LOCAL_SRC_FILES := $(local_src_files)

include $(BUILD_EXECUTABLE)
#===================================================================

LOCAL_STATIC_LIBRARIES:依賴的靜態庫;

LOCAL_SHARED_LIBRARIES:依賴的動態庫;

#===================================================================
#Include.mk
LOCAL_CPP_FEATURES += exceptions

LOCAL_C_INCLUDES += \
		$(APP_PROJECT_PATH)/../../include               \
		\
		$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/include\


#=================================================================
項目配置,指明頭文件路徑和各個項目通用的配置;

#=================================================================
#Libs.mk
LOCAL_PATH:= $(call my-dir)
SRC_PATH_ROOT:=$(LOCAL_PATH)/../../src

include $(CLEAR_VARS)
include $(APP_PROJECT_PATH)/Include.mk

LOCAL_MODULE:= libtest

#find all c files in source dir
local_src_files := $(wildcard $(SRC_PATH_ROOT)/lib/*.cpp)

#remove parent path of all c files in source dir
local_src_files := $(local_src_files:$(LOCAL_PATH)/%=%)

LOCAL_SRC_FILES := $(local_src_files)
LOCAL_STATIC_LIBRARIES := gnustl_static

#include $(BUILD_STATIC_LIBRARY)
include $(BUILD_SHARED_LIBRARY)
#===================================================================

編譯的時候,cd到build/jni目錄下,這個目錄也就是APP_PROJECT_PATH了。

有多個依賴庫時,在Libs.mk中仿照現有的添加新的庫,在Apps.mk中添加對應的庫依賴關係。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章