源码分析
核心MakeFile
这个 Makefile
是一个复杂的构建脚本,用于管理和构建一个大型项目。它包括多个目标、条件判断和递归调用 make
命令来处理多个子项目和子目录。让我们逐部分进行详细解析。
伪目标和变量定义
.PHONY: all clean install build test init
.PHONY
目标声明了all
、clean
、install
、build
、test
和init
是伪目标,不对应实际文件。
PLATDIRS = newbuild so fantom share party www update var SIP-INSTALLROOT linux
CLEANDIRS = $(PLATDIRS) apps
PLATDIRS
和CLEANDIRS
是目录列表变量,用于后续的构建和清理操作。
模式规则
%.all :
cd $* && $(MAKE)
%.clean :
cd $* && $(MAKE) clean
%.build :
cd $* && $(MAKE) build
- 这三条规则定义了通用目标规则,对于目录列表中的每个目录,会进入该目录并执行相应的
make
目标(all
、clean
、build
)。
clean
目标
clean:
rm -rf $(BUILD)/fantom
make $(patsubst %, %.clean, $(CLEANDIRS))
clean
目标删除$(BUILD)/fantom
目录,并调用make
命令清理CLEANDIRS
列表中的每个目录。
平台预构建目标
build_plat_pre:
@chmod +x $(ROOT)/update/setbaseversion
@if [ ! -d $(BUILDROOT) ]; then mkdir -p $(BUILDROOT) ; fi
@if [ ! -d $(BUILDROOT)/newbuild ]; then mkdir -p $(BUILDROOT)/newbuild ; fi
@if [ ! -d $(BUILDROOT)/apps ]; then mkdir -p $(BUILDROOT)/apps ; fi
@if [ ! -d $(BUILDROOT)/bin ]; then mkdir -p $(BUILDROOT)/bin ; fi
@if [ ! -d $(BUILDROOT)/party ]; then mkdir -p $(BUILDROOT)/party ; fi
@if [ ! -d $(BUILDROOT)/share/lib ]; then mkdir -p $(BUILDROOT)/share/lib ; fi
@if [ ! -d $(BUILDROOT)/share/Python-2.7/lib ]; then mkdir -p $(BUILDROOT)/share/Python-2.7/lib ; fi
build_plat_pre
目标进行了一些预构建任务,包括设置文件权限和创建所需目录。
应用列表和目标
sis_apps_list = accessskeleton coengine dnsdetect ngfw saas secvisual server_anomaly super \
wskiller update secdetect dgadetect httpdetector scandetect beforehanddetect \
cloud_report webshelldetect wxscandetect brutedetect dosdetect netflow_forensic smbdetect \
mailector secevent sec_dnsdetect sec_httpdetect sec_maildetect sec_netdetect sec_secdetect \
sec_smbdetect sec_tidnsdetect sec_tihttpdetect sec_tiipdetect sec_thirdparty infoshare monitor \
sec_filedetect sec_threatdetect documents agent
ifndef NO_SECLIB
sis_apps_list += seclib
endif
SISAPPS = $(patsubst %, apps/%, $(sis_apps_list))
sis_apps_list
定义了一个应用列表,包含多个应用名。- 如果未定义
NO_SECLIB
,则将seclib