通用makefile是如何煉成的(III)

前面我們已經完成產品信息的整合,接下來我們把系統相關的信息,以及編譯命令分別整合一下。具體實施仿照產品信息的整合方法

觀察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分別實現定製產品信息和平臺信息.





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章