我们以编译文件系统为例讲解过程,核心就是子系统的makefile。
首先,config.mk文件定义的通用的编译选项和宏定义;
其次,定义好本地的源文件头文件和编译选项;
最后,定义哪些文件生成这个结果以及生成的方法。
step1:
Openharmony_CommentByLine\kernel_liteos_a_note\fs\fat\makefile
下面的makefile的1~4包含了编译文件系统源文件的路径和头文件路径以及编译选项。
################################################################
# 5. $(LITEOSTOPDIR):表示内核顶层目录(OpenharmonyFor6ull_Weidongshan\kernel\liteos_a)里面的config.mk
include $(LITEOSTOPDIR)/config.mk
################################################################
# 1. $(shell pwd)表示:当前目录 Openharmony_CommentByLine\kernel_liteos_a_note\fs\fat
# $(notdir $(shell pwd))表示:去掉前缀即fat
MODULE_NAME := $(notdir $(shell pwd))
################################################################
# 2. LOCAL_SRCS表示:本地源文件,
# 当前目录下os_adapt文件夹下面所有的*.c文件即fat_shellcmd.c和fatfs.c
LOCAL_SRCS := $(wildcard os_adapt/*.c)
# 还包含了另外的路径下(third_party\FatFs\source)的*.c
LOCAL_SRCS += $(wildcard $(LITEOSTHIRDPARTY)/FatFs/source/*.c)
################################################################
# 3. LOCAL_INCLUDE 表示:本地源文件对应的头文件
LOCAL_INCLUDE := \
-I $(LITEOSTHIRDPARTY)/FatFs/source \
-I $(LITEOSTOPDIR)/fs/fat/virpart/include
################################################################
# 4. LOCAL_FLAGS 表示:本地编译选项
LOCAL_FLAGS := $(LOCAL_INCLUDE) $(LITEOS_GCOV_OPTS)
################################################################
# 6.如何链接
# $(MODULE)表示路径:kernel\liteos_a\tools\build\mk\module.mk
include $(MODULE)
step2:上面的5.定义了通用编译选项
源文件如下
OpenharmonyFor6ull_Weidongshan\kernel\liteos_a\config.mk
############### this is a makefile that you can config it ###############
-include $(LITEOSTOPDIR)/tools/build/mk/los_config.mk
TOP_LD_PATH = $(LITEOSTOPDIR)
SCRIPTS_PATH = $(LITEOS_SCRIPTPATH)
LITEOS_MK_PATH = $(MK_PATH)
LITEOS_SUBDIRS = $(LIB_SUBDIRS)
LIB_BIGODIR = $(LITEOS_LIB_BIGODIR)
##### liteos tables -u ldflags #####
# 内核的各种通用编译选项
-include $(LITEOS_MK_PATH)/liteos_tables_ldflags.mk
LITEOS_COPTS := $(LITEOS_COPTS_DEBUG) $(LITEOS_COPTS_BASE) \
$(LITEOS_COPTS_EXTRA) $(LITEOS_CORE_COPTS)
LITEOS_CXXOPTS := $(LITEOS_CXXOPTS_BASE)
LITEOS_INCLUDE := $(LITEOS_KERNEL_INCLUDE) $(LITEOS_EXTKERNEL_INCLUDE) \
$(LITEOS_COMPAT_INCLUDE) $(LITEOS_FS_INCLUDE) \
$(LITEOS_NET_INCLUDE)