2012-05-27 36 views
4

我對scons很陌生,試圖移植到內部引用許多VS項目文件(.vcxproj)的現有visual studio解決方案(.sln)上。這是多個輸出,包括各種庫和不同的可執行文件。將視覺工作室解決方案文件移植到scons的最佳實踐

從概念的角度來看,我不確定自己是否走向正確的道路,並希望得到更好的建議。

這裏是我的設置:

我的代碼庫的根目錄中的頂級SConstruct文件。另外我有一個SConscript文件,用於每個我的舊VS項目文件。 SConstruct文件爲每個SConscript文件調用一次SConscript函數,其中它指定源目錄以及輸出應作爲參數的位置。

此外,SConstruct文件創建並傳遞給每個SConstruct文件一組scons環境實例。例如,有一個用於編譯庫,一個用於編譯可執行文件,一個用於調試配置,一個用於發佈等,然後每個SConscript文件根據它想要完成的工作選擇一個它想要的文件。

有幾件事我很想知道: 1)有沒有比創建多個不同的環境更好的方法,每個配置變化一個?這是預期的使用模式嗎? 2)在Visual Studio中,我可以右鍵單擊某個特定的項目,然後選擇構建以僅構建該項目及其依賴的項目,忽略sln中依賴關係圖的其餘部分。對於scons,每次觸發構建特定庫時,它都會重新計算整個依賴關係圖,儘管理論上它只需要計算整個依賴關係圖的一小部分。

感謝您的任何建議。

馬克

回答

0

你具有SConstruct調用幾個附屬SConscript文件的做法的確是組織項目的好方法,被稱爲一個Hierarchical SCons build

關於您的問題,這裏有一些事情要考慮:

  1. 幾個不同的環境:除非你有每個製造商或目標(庫,可執行文件等),不同的編譯器或編譯器標誌,我會說你使用的方法有點矯枉過正。只需一個環境,你就可能達到同樣的效果。如果你確實需要每個子目錄/構建器的附加標誌,那麼你可以考慮將「main」環境傳遞給子目錄,並且在各自的SConscript中,克隆env並添加/追加你所需要的內容,如here所述。通過這種方式,整個解決方案將更加模塊化,避免重複,並保持一切共同點在一箇中心位置。

  2. 建立某些項目/目標:您可以通過選擇目標在命令行中,類似這樣的$ scons yourTarget做SCons的一樣。您可以使用env.Alias()函數使目標名稱更易於管理。 SCons確實在構建之前分析了所有內容,但取決於項目的規模,它不應該是一個問題,它仍然相當快。如果構建性能確實成爲問題,則here是提高性能的一些指標。

這裏有一些額外的好東西知道:

  • SCons documentation不壞WRT到其他開源工具。在該文檔頁面的底部,有幾個附錄提供了大量額外的信息。 SCons man page也相當完整。
  • 路徑可以在SCons的混亂,如果你不使用「#」提到here
  • 如果您需要處理MSVS項目,你可以使用MSVSProject()和MSVSSolution()builers提到here
+0

謝謝布雷迪。我所見過的大多數例子似乎也鼓吹單一的env方法。我可以看到多種環境方法可能會很快失去控制。 – mlee

相關問題