前面我們已經完成產品信息的整合,接下來我們把系統相關的信息,以及編譯命令分別整合一下。具體實施仿照產品信息的整合方法
觀察main.mk, 諸如RM := rm -f 是屬於操作系統相關的命令,所以我們單獨集中到system.mk
# main.mk
#
include build/systems/system.mk
## 定義產品信息。這裏BUILD_SPECS設置爲空,表示我們不做額外定製化
PRODUCT_SPECS :=build/spec.mk
include build/products/product.mk
# system.mk
#
RM:=rm -f
同樣的,CXX := g++, CXXFLAGS:=-Wall 是屬於編譯平臺相關的命令,所以我們把他們集中到platforms文件夾下platform.mk
# main.mk
#
include build/systems/system.mk
## 定義產品信息。這裏BUILD_SPECS設置爲spec.mk
PRODUCT_SPECS :=build/spec.mk
include build/products/product.mk
## 定義平臺相關的編譯命令。這裏PLATFORM_SPECS爲空,表示我們不做額外定製化。
PLATFORM_SPECS :=
include build/platforms/platform.mk
## 將產品信息中的定義的feature與平臺定義的編譯選項混合
CXXFLAGS+=$(OPTIONS)
# platform.mk
## 定義編譯命
CXX:=g++
CXXFLAGS:=-Wall
## 加載額外定製的編譯命令配置.mk
include build/platforms/platform-specs.mk
現在整個工程的目錄結構就是這個樣子的
類似於產品信息,對平臺相關的信息,我們也提供了一個定製化途徑,通過加載PLATFORMS_SPECS指定的mk文件,定製平臺信息。
對System,我們沒有提供額外的客製化手段,這是因爲操作系統是固定的,不會在編譯過程中發生改變,一般直接在system.mk中配置即可。
至此,我們已經完成了將產品信息從makefile中剝離,將編譯平臺信息從makefile中剝離,將操作系統信息從makefile中剝離,並且可以通過變量PRODUCT_SPECS, PLATFORM_SPECS分別實現定製產品信息和平臺信息.