2009-04-15 67 views
4

有沒有辦法限制Boost.Build遞歸掃描#include指令到特定目錄或目錄集的頭文件?即我希望它遞歸掃描我的項目中的頭文件。我知道他們的外部依賴不會改變(並且Boost和Qt他們相當大)。我最終在依賴樹中有大約50,000個目標,需要一段時間才能處理(即使沒有文件實際發生更改,也會產生1-2分鐘的編譯時間)。有沒有辦法阻止Boost.Build遞歸掃描#include指令的頭文件?

到目前爲止,我發現的唯一解決方案是利用INCLUDE環境變量(我使用MSVC) - 這意味着Boost.Build不需要被通知包含路徑(我正在使用該功能),因此不會掃描它們。這似乎有點破解。

我覺得我必須缺少明顯的東西,因爲我一直沒能找到其他人遇到類似的問題,即使我幾乎立刻就遇到了這個。我來的最近的是here

從調試輸出(bjam -d 3)判斷它也會不止一次地掃描大部分頭文件......我不知道這是否意味着它們不止一次作爲依賴項被添加,但肯定是加載文件和掃描整個內容的成本必須加起來?

如果我可以告訴它不要打擾掃描一個特定的目錄或一組目錄,我可以保證頭文件不會改變,那將是完美的。

回答

2

這個問題也發佈在Boost郵件列表上,我們在這裏得到了一個答案:http://lists.boost.org/boost-build/2009/04/21734.php

所以目前看來,答案是,至少現在Boost.Build沒有這個特性,解決方案是自定義Boost。根據您的需求構建,這有一定的意義。

但是,我仍然好奇爲什麼這不是人們更常見的問題。我發現緩存依賴會減少時間,但是如果我們掃描所有的外部庫,我們最終會得到一個巨大的依賴關係樹,其中大部分是多餘的?當我在一個項目上工作時,我根本不會經常更換第三方庫,但爲它們進行依賴檢查付出代價似乎是一種恥辱。

1

你可能想看看像SCons可選的編譯工具。 SCons的具有模式--implicit緩存它緩存隱式依賴性。這應該有助於你描述的情況。

下面是來自man page的提取物。

--implicit-cache
緩存隱式依賴關係。這會導致scons從上次運行時使用隱式(已掃描)依賴項,而不是掃描隱式依賴項的文件。這可以顯著加快SCons的,但具有下列限制: scons的不會檢測到隱式依賴搜索路徑的變化(例如CPPPATH,LIBPATH),其通常會導致使用不同版本的同名文件。 在隱式依賴關係搜索路徑(例如CPPPATH,LIBPATH)的較早版本中添加新的隱式依賴項時,隱式依賴關係中的scons會忽略具有相同名稱的當前隱式依賴項。

- 隱式代碼更改
強制SCons忽略緩存的隱式依賴關係。這會導致隱式依賴性被重新掃描和回收。這意味着--implicit-cache。

- 隱含-deps-不變
強制SCons忽略隱式依賴性的變化。這會導致總是使用緩存的隱式依賴關係。這意味着--implicit-cache。

+0

感謝您的回答!是的,還有很多其他的構建系統可以選擇,但是我的問題不是使用哪種構建系統,但是我對Boost.Build的理解錯過了什麼。 – 2009-04-27 05:16:50

相關問題