在FASTBuild中使用Distribution

2022-05-23 01:03:18 字數 3067 閱讀 4202

在fastbuild中使用分布式(distribution)編譯需要注意以下四個環節。

一、編譯器設定

某些編譯過程與分布式相矛盾,如果乙個物件不能被安全的分發出去,那它將自動在本地被編譯,乙個編譯過程可以安全的混合可分發物件與不可分發物件。

對於gcc/snc/clang編譯器,沒有任何限制。

對於msvc編譯器:

/zw 選項不能使用

預編譯標頭檔案不能被分發,他們是因機器而異的。(使用了pch的物件可以被分發)

/clr 選項不能使用,因為微軟編譯器的預處理器有bug。

二、編譯器同步

fastbuild會把編譯器(compiler)同步到遠端機器的乙個隔離的環境中,這避免了遠端機器也需要安裝工具鏈,並且能保證編譯器的一致性。為了實現這些,fastbuild需要知道通過網路要同步哪些檔案。這需要通過compiler函式來實現。下面以乙個實測可用的編譯器配置,以 vs 2015 amd 64位編譯器為例:

.vsbasepath = 'c:\program files (x86)\microsoft visual studio 14.0'

compiler('

msvc2015

') //

(optional) alias

}

三、工作者目錄

工作者(worker)就是除了主機之外,通過網路參與到分布式編譯過程中的其他機器,他們的職責就是在空閒的時候,提供若干個(可設定)cpu核心出來,供主機編譯使用。工作者(worker)需要通過乙個商定的位置被找到,這個商定的位置是乙個主機(host)和工作者(worker)都能找到的網路路徑。這個路徑要通過環境變數 fastbuild_brokerage_path 來設定。工作者通過在這個位置寫乙個標記來示意自己可用。客戶機通過檢查這個位置來尋找可用的工作者。這裡的重點是這個fastbuild_brokerage_path

指定的必須是乙個共享網路路徑,而且能被所有參與分布式編譯的機器自由地讀寫

下面是乙個簡單的啟動fastbuildworker的bat指令碼(start_fbuild_worker.bat),如果發現該程序已存在,則不做任何操作。正常模式啟動,啟動後在桌面右下角會有圖示顯示。

echo

off& color 0a

rem 在這裡設定的環境變數只在bat指令碼內有效

set fastbuild_brokerage_path=\\192.168.22.31\.fastbuild.brokerage

tasklist |

find /i "fbuildworker.exe.copy" || start /min "" fbuildworker.exe -cpus=2 -mode=idle

下面是一

個簡單的啟動fastbuildworker的vbs指令碼(start_fbuild_worker.vbs),如果發現該程序已存在,則不做任何操作。控制台模式啟動(-console),並且隱藏了視窗,啟動後只在任務管理器中才能被看到。具體用途自己體會。(在實際應用中發現,這個指令碼第一次執行不會生效,大概是剛剛設定的環境變數在指令碼中沒有生效,不過worker程序關閉之後,再次執行就會生效了)

set bag=getobject("

winmgmts:\\.\root\cimv2")

set pipe=bag.execquery("

select * from win32_process where name='fbuildworker.exe'")

foreach id in

pipe

wscript.quit

next

wscript.createobject(

"wscript.shell

").environment("

user

").item("

fastbuild_brokerage_path

")="

\\192.168.22.31\.fastbuild.brokerage

"wscript.createobject(

"wscript.shell

").run "

fbuildworker.exe -cpus=2 -mode=idle -console

",0

worker啟動後,會在剛才設定的那個網路路徑中寫乙個標記,表示自己隨時可以被呼叫,如下圖:

大家不要擔心這個worker程序會占用太多資源,當你的cpu處於繁忙的狀態,他會自動地把自己的標記取消,使自己不可被呼叫。換句話說,worker(s)只會在自己有餘力的時候才會幫助他人工作。

四、啟用分布式編譯

在上述步驟都順利完成之後,便可以開始分布式編譯了。執行fbuild.exe的時候,只需要加上 -dist 或者 -distverbose 引數,就可以呼叫遠端的worker為自己工作。

下面是乙個簡單的啟動fbuild的bat指令碼

echo off &color 0a

rem 在這裡設定額環境變數只在bat指令碼內有效

set fastbuild_brokerage_path=\\192.168.22.31\.fastbuild.brokerage

call

start_fbuild_worker.bat

fbuild.exe -cache -distverbose

pause

這裡呼叫了start_fbuild_worker.bat指令碼,其實使用分布式編譯不一定非要在本機開啟worker程序,但是本著互惠互利的原則,在使用別人的cpu核心的時候,最好自己也開啟worker程序。

以上便是我學習使用fastbuild的總結,不可否認fastbuild作為乙個免費開源的分布式編譯工具,效能相當出色,之前我們的c++專案使用vs完全編譯一次需要花費40min,在使用了fastbuild之後,開啟caching和distribution,可以在5min內完全編譯一次,效率提公升了近90%。感謝fastbuild的開發人員,讓我和同事們在工作的時候心情舒暢了很多。

在FASTBuild中使用Caching

在fastbuild中使用快取只需要注意三個環節 一 設定編譯選項 對於gcc snc clang編譯器,沒有特殊的要求 對於msvc編譯器,必須設定 z7 除錯模式。但是這裡會有個問題,因為 z7 選項被設定後,所有的除錯資訊都放在了 obj 檔案中,而沒有對應的.pdb檔案,這會導致編譯出來的 ...

在中使用SQLDMO

曾幾何時,夥伴們為的公升級傷透了腦筋.往往程式的公升級趕不上資料庫的公升級 版本控制的好,這也許不是什麼問題,但對於很大一部分中國公司來說這是無法避免的 而有些n久以前的資料庫要使用新程式的時候,資料庫的公升級簡直就是無從下手.所以對比資料庫公升級的緊要性就逐漸的凸現出來.對於表和字段的公升級按道理...

在ClanLib中使用blend func

本文是對blend func完全沒有認識的人寫的,就好象一天前的我一樣。廢話我就留到後面才說吧。在clanlib庫中的cl su ce與cl sprite中都會有 這個函式 void set blend func cl blendfunc src,cl blendfunc dest 其cl blen...