System software會依照需求訂出一些build configuration,build完之後變成一包軟體包 (software package)。每一種build configuration有不同的build flow、software組合、需要的工具等。當system software越來越複雜時,build configuration數量與複雜度也會變高,所以需要有專用的工具輔助管理build configuration,並依照build configuration來build出需要的executable組合,這就是我們接下來幾天要介紹的工具: build system。
需要自行管理software package當中的software組合
不同的software package需要的software、版本也不相同,沒有build system的話,就需要人工紀錄software組合,software package數量多的時候管理不便且容易出錯。
需要每次手動建立build environment
不同的software package需要的build environment也不相同 (例如: 環境變數、library、tool……),沒有build system的話,就需要人工紀錄並且執行build environment的建立流程,每次build之前都需要建立build environment,重複頻率高、複雜度也高管理不便且容易出錯。
需要每次手動依照需求下指令build software package
不同的software package在不同需求的時候需要下不同build command,沒有build system的話,就需要人工紀錄並且執行build software package的建立流程,每次build之前都需要依照需求build software package,相似度高、複雜度也高管理不便且容易出錯。
利於團隊合作
Build system利用build configuration將build flow參數化、程式化,合作的system software developer不需要重新了解一個build configuration的完整build flow,只需要知道如何修改、新增需要的規則來達到目的即可。
Build system是一套依照build configuration執行工作的工具,包括幾項功能
Build Configuration Template
每一套Build system通常會提供build configuration template,可以讓user定義build configuration,build system會依照build configuration進行build flow。
Package Config
Build configuration中可以讓user定義需要的system software,build system會依照build configuration取得對應的system software。
例如: build configuration當中設定好Linux kernel版本與GCC compiler toolchain的版本組合,build system會自動下載對應版本的Linux kernel及GCC的source code,或者使用system software developer已事先準備好source code的路徑準備build。
Build Environment
Build configuration中可以讓user定義需要的build environment,build system會依照build configuration建立需要的build environment(例如: compiler版本、tool版本、環境變數等)。
例如: 在不同build configurations當中,tool版本設定中,Python版本會有差異,build system負責提供對應的Python版本給build flow使用。
Build Automation
Build system會搭配build automation utilities,以增加自動化並減少人為介入build flow,而部分build system會自動產生build automation script。
例如: 最常用的build automation utility是GNU make,build system會依找build configuration自動產生GNU make需要的makefile。
我們今天簡單介紹build system與system software依賴於他的原因,接下來我們會介紹build system的特色、如何準備build environment、主流build system簡介等內容。