必需
当前路径
LOCAL_PATH:= $(call my-dir)
变量是全局,要清除其他影响,新的makefile从此开始
include $(CLEAR_VARS)
(可选)包含其他mk的宏定义(enable := yes)
include $(LOCAL_PATH)/../good.mk
LOCAL_MODULE_TAGS :=user eng tests optional
optional:指该模块在所有版本下都编译,否则只能在对应的版本下编译
LOCAL_MODULE_TAGS := optional
模块名
LOCAL_MODULE := libxxx
编译的文件
LOCAL_SRC_FILES := \
A.CPP \
B.CPP \
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/ \
$(LOCAL_PATH)/../include \
other/
库
LOCAL_LDFLAGS := -lpthread //链接第三方静态库
LOCAL_STATIC_LIBRARIES := //静态库
LOCAL_SHARED_LIBRARIES := //动态库
增加宏定义
#LOCAL_CFLAGS += -DXXX 相当于在所有源文件中增加一个宏定义#define XXX
ifneq ($(filter emulator,$(BOARD_VENDOR)),)
LOCAL_CFLAGS += -DEMULATOR #LOCAL_CPPFLAGS += -DENABLE_PARCEL
endif
EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在内核模块中直接调用
LOCAL_EXPORT_SYMBOLS := true
生成动态库or静态库or可执行文件
ifeq ($(enable), yes)
include $(BUILD_SHARED_LIBRARY)
endif
ifeq ($(enable), no)
include $(BUILD_STATIC_LIBRARY)
endif
include $(BUILD_EXECUTABLE)
makefile的选项CFLAGS、CPPFLAGS、LDFLAGS和LIBS的区别
如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给”-Wl,R”
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib # 告诉链接器从哪里寻找库文件
LIBS = -lmysqlclient -liconv # 接器要链接哪些库文件
CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上##涵盖了编译和汇编两个步骤。
CFLAGS += `pkg-config --cflags gstreamer-1.0 glib-2.0`
LDFLAGS += `pkg-config --libs gstreamer-1.0 glib-2.0`
指定输出位置
bin_install_path := $(TARGET_OUT)/usr/bin
LOCAL_MODULE_PATH := $(bin_install_path)
> ALL_DEFAULT_INSTALLED_MODULES来获得当前所有要打包到系统镜像文件中去的模块文件的
ALL_DEFAULT_INSTALLED_MODULES += $(addprefix $(TARGET_OUT)/usr/bin/,$(notdir $(LOCAL_MODULE).so))