2017-10-16 69 views
1

我正在使用Cake 0.23.0,很高興地看到任務依賴關係已被擴展。不幸的是,似乎即使是最新版本也不能解決我的問題。 或者我只是做錯了什麼?在Cakebuild中創建任務序列

我想達成什麼

  • 假如我有相等多種平臺(如x86或x64)定義的任務
  • 我想定義首先是一個生成序列爲x86平臺執行所有任務。一旦完成一個初始化任務應該被執行,只是將平臺設置爲x64,然後應該執行與x86一樣的任務。
  • 實施例序列: 任務初始化86 - >任務A - >任務B - >任務C - >任務初始化64 - >任務A - >任務B - >任務C

當前行爲 由此產生的序列是 任務初始化x86 - >任務A - >任務B - >任務C - >任務初始化x64

看來,Cake一次只遵守任務依賴關係。我已經定義它像圖所示:

Task("Compile-All-Platforms") 
    .IsDependentOn("Init-86") 
    .IsDependentOn("A") 
    .IsDependentOn("B") 
    .IsDependentOn("C") 
    .IsDependentOn("Init-x64") 
    .IsDependentOn("A") 
    .IsDependentOn("B") 
    .IsDependentOn("C"); 

回答

1

如果你想建立在兩個大的步驟,用簡單的方式做這將是封裝A,B和C的構建邏輯的輔助功能,然後將它們包裝在x86或x64任務中。這裏的想法是利用Cake可以爲您創建的依賴關係樹,而不是寫下Compile-All中的所有依賴關係。實際上,這是你想要使用構建協調器的主要原因。當然,這是一種簡單的方法,可以使它適用於3個任務和2個平臺。一個更具可擴展性的解決方案是創建和插入一個接受「平臺」參數並構建N個項目的助手腳本。

請注意,下面的代碼僅顯示如何獲得您所要求的操作,但需要根據適當的WithCriteria指令進行改進。如果按照原樣進行操作,您將無法僅構建x64。

Task("Compile-x86"){ 
    BuildA(); 
    BuildB(); 
    BuildC(); 
}; 

Task("Init-x64") 
    .IsDependentOn("Compile-x86"){ 
    //Your init code goes here 
}; 

Task("Compile-x64") 
    .IsDependentOn("Init-x64"){ 
    BuildA(); 
    BuildB(); 
    BuildC(); 
}; 

Task("Compile-All-Platforms") 
.IsDependentOn("Compile-x64"); 
+0

你好雷諾, 謝謝你的回答。我想我可以儘量減少任務和功能的數量。基本上這些功能可以完成我需要的工作。 我建議改進文檔,因爲對於我來說,直到遇到麻煩時才明確表示C#Make的行爲如此。 –

+0

......另一件重要的事情應該在新手文檔中更好地突出顯示:如果您在具有如「IsDependentOn ...」定義的依賴關係的任務中使用「WithCriteria」,則將執行任務,儘管依賴不被滿足。 一旦你知道這個,你可以處理它。 –

+1

您可以在https://cakebuild.net/提交您的意見,因爲我不是Cake的貢獻者。這就是說,如果你的構建步驟足夠複雜,你可以(應該?)使用Cake擴展模塊來封裝每個構建步驟。您可以在方法中調用它兩次,並在調用之間更改配置。但是,你會有一個單一的構建腳本,雖然我很確定你更好的步驟,利用任務依賴關係。 請注意,我們不知道您的系統的實際複雜性,這個回答理所當然有3個項目與2個目標平臺。 –