mk文件编写,项目配置样例

本文档介绍了在项目配置中,如何组织多个依赖库工程的目录结构,以及如何在MK文件中添加和管理第三方库的编译顺序。重点关注LOCAL_STATIC_LIBRARIES和LOCAL_SHARED_LIBRARIES的使用,它们分别用于指定依赖的静态库和动态库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录结构
	/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中添加对应的库依赖关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值