gsmake是一個相似於gradle的自動構建工具,使用go語言開發:c++
- gsmake是一個包管理/下載工具;
- 每一個包有它全局惟一的包名,以及版本號;
- 包能夠定義一系列的任務(task),任務支持由golang語言編寫;
- 包能夠相互引用,可是不能出現引用環;
- gsmake可以容易的執行包定義的任務;
經過上面描述不難看出,gsmake不單單能夠用替代make管理golang代碼。經過編寫一系列插件 支持c/c++工程管理也是可行的,甚至你用它來編寫一本《gsmake入門》的書也是有可能的這個 例子在介紹maven/gradle的時候常常提到,總之一句話你能夠把它想象成maven/gradle的golang 實現版。git
- 程序員通病,本身的輪子仍是要更圓些;
- 咱們的大golang本身的包管理工具,不支持版本化;有一些三方的庫例如:gopm 試圖解決這個問題,可是我以爲解決得還不夠好;
- 基於jvm的maven/gradle過重量級了,一個jvm就要200M;
- 去中心化——maven/gradle須要中心倉庫——gsmake不須要, 理論上能夠將包託管在任何代碼託管網站;現階段支持下列經常使用網站:github/bitbucket/gopkg.in
gsmake通常工做流程以下:程序員
因爲golang是一個編譯型語言因此須要一個編譯的過程,將上一步生成的task調用粘合劑代碼與用戶 定義的task代碼一塊兒編譯爲一個程序,而後運行之;github
task具備如下屬性golang
- task名稱全局有效;
- task之間能夠有由來關係,可是不能出現環;
- 不一樣包定義的task能夠有相同的名稱,以及不一樣的前置依賴task;
- gsmake將不一樣包但相同名稱的task任務看作同一個task的多個執行體;
gsmake接收一個task名稱並執行它——在內部gsmake須要一個任務排序的過程。被依賴的task須要先執行:數據結構
經過上面的描述咱們知道,用戶定義的task組成了一個有向無環圖,咱們知道對於這種數據結構的排序其實就是一個簡單的拓撲排序的過程,gsmake的這部分實如今這裏jvm
golang的開發環境是必備的,這裏就不累述了:maven
- go get github.com/gsmake/gsmake/cmd/gsmake,這一步將安裝一個臨時的gsmake可執行 文件到${GOPATH}/bin目錄下,不要忘記添加該路徑到系統PATH
- 進入${GOPATH}/src/github.com/gsmake/gsmake,執行./gsmake setup ${安裝目錄}
- 進入比較長的等待——經過gsmake再一次編譯gsmake自己,並經過setup任務安裝gsmake, 這是一個自舉的過程。自此咱們就能夠丟開gopath,以及golang的版本陷阱愉快的玩耍了。
看gsmake項目自己吧,它會本身管理本身:)猛戳這裏!!!!! PS:請忽略個人英文readme.md,你懂得:)工具