2012-02-29 80 views
4

我需要在我的項目中嵌入Boost標頭。包含本地文件

根據this question,建議將包括使用雙引號(#include "boost/filesystem.hpp"),以便它在安裝時不使用Boost的系統版本。

什麼行爲,根據C++標準和流行的實施方式中,當這些本地報頭包括其它標題用尖括號(這似乎是在Boost頭代碼風格)?

回答

4

大多數我見過將包括相對於源文件的路徑引號標頭中的「流行」的實施被尖括號編譯搜索相對於指定的查找路徑包括。正如該線程中提到的那樣,編譯器如何搜索包含在引號中的頭文件與括號之間的實際區別純粹是實現定義的。

我不會試圖避免與你所指出的具體原因另一個安裝的版本衝突的希望用引號像升壓庫。它包含了相對的頭文件,通常帶有尖括號,所以如果你安裝了兩個版本,你可以避免使用錯誤版本的boost文件,但這不是通過在你的文件尾加引號來加以解決的。

相反,你應該看看優先的包括你指定編譯器的路徑。

編輯:你也應該看看你的lib路徑優先級,以及用於靜態鏈接(感謝詹姆斯甘孜您的建議)。

什麼行爲,根據C++標準和流行 實現中,當這些本地報頭包括其他頭與 尖括號(這似乎是在Boost頭代碼風格)?

通常情況下,如果將自己的標題包含在尖括號中,則您可以期待完全相同的行爲。

+3

鏈接時庫路徑的順序也是如此。使用一個版本的頭文件和另一個版本的庫不太可能工作得很好。 – 2012-02-29 18:10:47

+0

好點。我會把它添加到asnwer。 – stinky472 2012-02-29 18:25:24

+0

使用GCC,'-I'參數仍然在任何其他目錄之前搜索,無論是否包含'#include'樣式。 – 2012-02-29 22:26:50