建構系統、函式庫與相依性
建構系統(build system)
想像照著一份長長的食譜烤蛋糕:先融化奶油、再拌入麵粉、烤 40 分鐘、最後抹上糖霜。如果你每次都靠唸出每個步驟、用手一步步做,難免會出錯、漏掉某一步,或順序顛倒。建構系統就是那位廚房助手,牢記著把你的原始碼變成完成、可執行程式的整套食譜,而且每一次都用同樣的方式把它做出來。
具體來說,建構一個真正的程式很少只是一道指令。你可能得對十幾個原始碼檔跑前置處理器與編譯器(gcc -c a.c、gcc -c b.c……),再把產生的目的檔連結在一起,也許還得先複製資料檔或產生某些程式碼。建構系統把這所有步驟以及它們必須發生的先後順序都記錄下來,於是你不必逐條手打,只要執行一道指令(通常就是 make),它就替你跑出正確的順序。它還能只做真正需要做的工作,跳過任何已經是最新的部分。
為什麼重要:建構系統帶來自動化(一道指令取代二十道)、可重現性(同一份建構在你的機器、同事的機器、伺服器上都跑出相同結果),以及速度(只重建有變動的部分)。少了它,一個逐漸成長的專案很快就會大到沒人能憑記憶正確地建出來。代價是你必須準確描述你的建構流程;建構系統會忠實地自動化你交代的一切,包括錯誤在內。
沒有建構系統時,你每次都得打: gcc -c main.c -o main.o gcc -c util.c -o util.o gcc main.o util.o -o app 有了它,你只要打: $ make
建構系統把一連串固定的建構指令,變成一道可重現的單一指令。
建構系統並不理解你程式碼的含意,它只知道哪些檔案相依於哪些檔案、該執行哪些指令。如果你把相依關係描述錯了,它會毫不猶豫地產出一個壞掉或過時的程式。
又稱
另見