2016-06-28 44 views
4

我開始一個新項目,需要選擇一個構建系統。我討厭不得不手動將每個C++源文件添加到我的構建規則中,因爲這是2016年應該自動執行的那種事情,並且在重構時會造成額外的繁瑣工作(重命名頭中的類以及源文件和構建系統文件...)。Bazel是否與CMake具有文件匹配相同的問題?

我開始使用CMake的遞歸文件尋找,當我遇到此帖一:使用兩個階段的構建(cmake並做),並在正常使用Specify source files globally with GLOB?

這表明通配符是邪惡的,因爲CMake的的用戶只重新運行第二階段(make)。

乍一看Bazel也允許文件通配。與巴澤爾一起使用是邪惡的嗎?在代碼庫上運行find這樣的縮放問題,構建系統真的需要避免它?

回答

3

它應該被發現在Bazel中使用glob,它可以導致大的球體的分析階段很長,但是如果你使用--watchfs標誌,那麼文件系統的變化將被跟蹤到監視文件系統事件而不是說明所有的文件,所以增量構建應該非常快。

+2

帶上一粒鹽。只有您的球體不超過腕錶的系統極限,這纔會起作用。在Ubuntu上,這是例如〜8K。 – abergmeier

6

巴澤爾並沒有在文章中提到的問題,即:

(我們不建議使用GLOB收集源文件的列表,從 源樹如果沒有的CMakeLists.txt文件更改當源 添加或然後取出生成的構建系統無法知道什麼時候 問CMake的再生。)

巴澤勒總會發現,如果添加,刪除或水珠的比賽發生了任何變化,並相應地重建。巴澤爾絕不會給你帶來過時的結果。

一對夫婦的注意事項和限制in the build encyclopedia globbing,所以你應該閱讀之前使用globs。

此外,你可以看到正在使用巴澤勒查詢晶片被保護:

bazel query '//path/to/your:target' --output=build 
# /Users/kchodorow/gitroot/path/to/your/BUILD:7:1 
java_library(
    name = "target", 
    srcs = ["//path/to/your:A.java", "//path/to/your:B.java"], 
) 

這將打印的「評估」來代替,這樣你就可以玩,看看巴澤勒如何跟蹤輸入。

相關問題