2008-09-28 43 views
5

我有一個項目,我正在研究(學校),我正在挖掘Boost庫的解決方案。我需要一些方法來將所需的Boost源代碼與我的應用程序一起分發,以便可以在編譯時不需要在系統上安裝庫的情況下對其進行編譯。 (學校電腦缺乏你可以提及的任何東西,學校去年剛剛安裝了CVS,但他們確實有VS2005)包括與C++源相關的增強庫(使用Visual Studio)

注意:我在Vista上使用Visual Studio 2005。我的系統上有Boost 1.34.1,我用的是automatic installer。我遇到的文檔中提到了一些關於使用BCP命令的內容,但該命令似乎沒有複製任何內容。 (我使用絕對路徑來調用BCP,所以我不會最終調用錯誤的命令)。

編輯:我正在嘗試使用RegEx庫。

編輯:我使用BCP的命令是:"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\

,並返回:no errors detected

+0

你可以發佈你用來運行bcp的命令嗎?這可能有助於確定問題。 – 2008-09-28 21:10:47

回答

5

這取決於你使用的庫。如果你使用的只是頭文件庫(大多數boost庫是,一些明顯的例外是信號,序列化和日期/時間),你可以複製這些頭文件。否則,你也需要複製cpp文件。我的建議是將其納入您的項目。因此,您可以這樣做:從項目設置(工具 - >選項 - >項目和解決方案 - > vC++目錄 - >包含文件)中刪除boost include路徑。嘗試編譯。看看哪些包含失敗。將該文件從boost目錄複製到項目目錄中。泡沫,沖洗,重複,直到你的項目編譯。

如果您使用的庫需要.cpp文件,您將在鏈接時發生錯誤。將所用庫的所有.cpp文件複製到項目目錄,並將它們全部添加到解決方案中。重建和交叉手指。

有關更詳細的答案,請發佈您正在使用的庫。

+0

我正在使用RegEx庫。 – epochwolf 2008-09-28 18:12:37

0

我以前遇到過這個問題,將提升嵌入到我的項目中。每個單獨的boost庫都帶有各種項目文件,用於構建不同的製作系統(Jam,Make,Visual Studio 6 ...),但對於較新版本的VS,它們從未如此優秀。

我總是喜歡創建一個新的項目文件,並將boost直接嵌入到我的項目中。這很簡單,你只需要添加所有的源文件並正確設置項目選項。然而,有一點需要注意,那就是你必須將庫輸出文件命名爲boost,因爲它們的包含文件依賴於它。

一旦你完成了這個任務,你可以像你的項目中的任何其他文件一樣分發boost庫。

1

這對我來說似乎有點奇怪。如果你要發佈源代碼,那麼你發佈的人應該能夠安裝boost。那麼如果他們已經有了提升,就不會有重複和混亂,否則如果他們不需要建立一個庫,他們會爲他們的系統建立正確的庫。如果你分發的人不需要安裝boost,那麼我會建議在安裝包中分發二進制文件,以儘可能簡化它們。

+0

他說這是一個學校項目。等級分配的人不會爲項目安裝圖書館,他們會花幾天時間爲所有不同的學生擺弄這些圖書館。作業通常需要自包含。 – Roel 2008-09-28 15:02:22

+0

羅爾有正確的。我需要將庫與其他源代碼一起嵌入。 – epochwolf 2008-09-28 18:11:40

2

嘗試調用BCP用這個命令:

"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" --boost="c:\Program Files\boost\boost_1_34_1" regex regex 

--boost告訴在安裝升壓BCP,第一regex是模塊的名字,第二個是目標目錄。

哦,如果你還沒有注意到,在libs\regex\build\有Visual C++ makefile。

+0

謝謝,會嘗試。如果它有什麼不同,我使用標準的C++,而不是微軟對它的擴展。 – epochwolf 2008-09-29 12:07:06

2

根據您使用正則表達式的評論,下面是您的操作:下載'正常'boost分發zip文件。將它解壓到某處。轉到libs/regex/src。複製並粘貼該目錄中的所有.cpp文件到您的項目目錄。將它們添加到Visual Studio項目中(右鍵單擊,「添加」 - >「現有項目」)。然後進入boost/regex並將所有內容(頭文件)複製到項目目錄(包括子目錄)中。將您自己的.cpp和.h文件中的所有包含從#include更改爲「regex.hpp」,以便它包含本地目錄中的頭文件,而不是系統範圍內安裝的頭文件。確保從我的項目設置中刪除系統範圍的包含路徑,就像我在上一篇文章中所說的那樣。

然後編譯你的代碼。你會得到一些「缺少包含文件」的錯誤,因爲正則表達式依賴於其他的boost庫。重複整個過程:去boost/xxx其中xxx是正則表達式正在尋找的庫。您可以從錯誤消息中推斷出庫。將編譯器要求的所有內容複製到您自己的項目目錄中。您可能需要在您的目錄佈局前進行一番操作。這確實是一步一步的方法,每一步都是一樣的:識別丟失的文件,複製它,查看是否找到並修復了包含,並繼續下一步。恐怕這是無聊的工作。

你可以用bcp自動完成這一切,但是對於像學校項目這樣的一次性項目我不會打擾;只有當你認爲你將來的項目需要你提供一個獨立的zip文件。

+0

我可能會在未來的項目中使用Boost。教授不介意。 – epochwolf 2008-09-29 15:42:46

0

這是一個PITA編譯提升;只有積極的學生才能夠做到這一點。您是否考慮過捆綁安裝程序?

相關問題