天天看點

1230_SCons對于依賴的處理

全部學習彙總: ​​GitHub - GreyZhang/g_SCons: A new member in my toolbox, looking forward to replacing make tool later.​​

1230_SCons對于依賴的處理

使用Makefile來處理工程建構很好的一點就是在于可以實作“差分式”更新,SCons也可以做到這一點。這就得準确處理依賴的關系,而這個依賴的可能不僅有檔案。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

SCons的差分式更新預設采用的是MD5簽名或者校驗和的方式來實作的,也可以配置成為檢查時間戳。檢查時間戳是Make常用的方式,如果二選一的話或許我會選擇時間戳變化吧。此外,SCons還提供了其他的檢查變化方式定制的可能性。

如果使用MD5,在很多場景下是可以節省時間的。比如,注釋修改後,最多會更新目标檔案。但是,由于目标檔案的MD5不會發生變化,是以剩下的部分不會進行建構。這樣,可以減少連結過程所消耗的時間。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

如果采用類似make的處理方式,判斷時間戳。那麼可以使用Decider來指定。這種指定有兩種方式,一個是從時間戳的角度描述,另一個從工具內建角度描述。兩個效果其實是一緻的。這樣,如果想對标make,其實這裡就有很好的答案了。自然,之前也遇到過一些純粹靠時間戳的方式中的問題。或許,MD5也可以作為嘗試吧!

1230_SCons對于依賴的處理

這真是一個好消息!看起來,這裡給了一個超級糖果!MD5與時間戳對比的方式可以結合在一起,這樣就能夠做到又快又好了。看到這裡,基本上就可以确定後續直接用這個配置了。但是這個配置有一個缺點,那就是如果代碼在1秒的時間差之内做了修改,可能工具識别不到。但是反過來考慮,這樣的情況基本不會出現在手動的編碼過程中。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

檢查檔案更新的方式也可以自己定義,但是從目前我自己的經曆角度考慮,對我來說這個意義不大。前面提供出來的幾種選擇基本上已經夠了。

1230_SCons對于依賴的處理

Scons還允許通過環境變量建立的方式在一個配置檔案中用不同的方式來建構不同的可執行程式。誠然,這個是一個有用的特性。但是從工具箱簡化的角度考慮,直接建立兩個獨立的環境就好了。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

多目錄的管理以及頭檔案搜尋,從開始就一直想知道解決方案的問題,在這裡找到答案了。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

可以通過緩存隐含依賴的方式增加效率,也是一個很好的功能,但是也是錦上添花的功能。對于大型項目來說自然是至關重要,但是我所接觸到的項目這方面可能并不需要什麼特别的關注。可以先考慮能夠實作,後面再考慮可能的優化。比較直接的兩個優化可以從上面的兩個選項開始。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

如果從基本的C工程資訊中心找不到的依賴關系,可以采用顯式指定的方式來處理。類似的功能可以用來實作一個版本号更新之類的功能。處理這種特殊需求,類似的需求其實可以從工程管理的角度來避開。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

外部檔案的依賴性,類似的功能需求也可以通過工程管理的方式解決。如果有類似的更新而配置中沒有良好的規則實作,幹脆直接做一次全新的編譯即可。

1230_SCons對于依賴的處理
1230_SCons對于依賴的處理
1230_SCons對于依賴的處理
1230_SCons對于依賴的處理

庫檔案等檔案的更新,解決的方式還是重新編譯好一些。這樣的處理其實是自然而簡單的。

order-only依賴,類似的處理如果是我遇到可能會直接甲苯實作一個獨立的更新檔功能。這樣,保證SCons本身用途的專一性和簡潔性。

1230_SCons對于依賴的處理