2009-02-04 42 views
17

什麼是Boost Jam並且值得遷移到Jam?什麼是Boost Jam並且值得遷移到Jam?

據我所知,果醬是由perforce構建的系統,但我不知道如何提高果醬&定期果醬是不同的。

我也希望可能有人在SO社區與它合作過,也許可以突出一些差異和/或好處。

回答

5

爲了我的目的,它只是爲你建立了增強庫,我不知道你可以用它做任何事情,所以我不明白你可以通過遷移到它意味着什麼。對不起,但我不知道普通的果醬是什麼。由於沒有人提供了答案,我只是提供我的理解。

Boost是C++的類和函數的集合,可用於各種任務。 boost的類和函數被分組到庫中。一些庫在頭文件中擁有所有代碼,只需使用#include預處理器語句就可以使用它們,而其他庫(如文件系統或正則表達式庫)的部分實現在.cpp文件中。

編譯這些.cpp文件可能需要很長時間(這就像30分鐘,取決於你正在編譯的內容),如果每次你想重新編譯你的程序花了半個小時,這將是一個真正的痛苦。所以他們所做的只是那些部分存儲在.cpp文件中的庫,你可以將它們預編譯爲一個.lib文件,這就是增強阻塞的目的。這意味着你只需要花費半個小時編譯它們一次,從此你再也不用等待半個小時。然而,正如你所想象的,每個boost庫都包含許多cpp文件和許多頭文件,並且每個boost庫都有很多不同的版本(調試版本,發行版本,多線程等),所以它不是一個簡單的過程來自己編譯boost庫。這就是助推器進來的地方。你給它編譯庫的命令,然後它將所有的命令發給編譯器,最後,你將得到一組預編譯的.lib文件,一個用於每個圖書館的每種不同風味。頭文件以某種方式告訴鏈接器要包含哪些lib文件,因此如果您有正確的路徑設置,預編譯的.lib文件的正確風格將自動鏈接到您的程序,從而爲您節省30分鐘的編譯時間。

你可以看到哪些庫需要通過boost jam來編譯,以及哪些庫不通過查看此頁面:http://www.boost.org/doc/libs/1_37_0 - 如果庫不需要lib文件(因此不需要你混淆boost果先),它會說「Build & Link:Header only」,而如果一個庫確實需要你預編譯一個lib文件,它會說「Build & Link:Automatic linking」。另外,如果您在Windows上,則可以下載預編譯的.lib文件,這樣您就不必使用助推阻塞。爲了做到這一點,你應該做的是去www.boost.org頁面,進入入門部分,並一直遵循,以確保你有一切正確的設置。該頁面的Windows版本上的一個鏈接告訴你在哪裏可以找到預編譯的.lib文件。

+0

只是想清楚我只是發佈這個,因爲我認爲它可能是有用的。我從來沒有用過果醬,但那是幾天,沒有人回答這個問題,所以我決定回答我所擁有的知識。 – 2009-02-08 23:35:15

+3

其他評論(可能稍後添加)說明Boost Jam是一個構建系統;所以它超越了boost庫本身的編譯。 – Jaywalker 2010-11-25 09:55:52

+0

這個答案只是錯誤而且誤導。 – 2015-07-30 12:04:40

9

如您所述,Boost Jam是一個構建系統,可以獨立於任何其他boost庫使用。我對Perforce Jam一無所知,但就我的理解而言,Boost的阻塞非常相似,並且大部分是兼容的。

主要區別在於Boost Jam通常帶有Boost Build,這是爲常見任務設計的卡紙規則的集合,例如,編譯庫,運行單元測試,創建doxygen文檔等。

與其他構建系統相比,Boost Jam/Boost Build專爲輕鬆編譯不同的變體而設計。因此,如果您想將編譯設置從調試更改爲發佈或單線程或多線程,則會自動確定很多更改。

缺點是語法非常挑剔,在boost網站之外,沒有好的文檔。但是我認爲Perforce Jam在這方面同樣糟糕。

+1

同意,語法和整個過程不是那種直覺 – 2010-12-28 11:46:42

8

鑑於構建工具的選擇,我不會遷移到果醬。有更好的構建系統 - C/C++的CMake/SCons,Qt的qmake,Java的Ant,NAnt和.NET的MSBuild等等。它們在技術上可能並不優越,但使用起來會更不痛苦,因爲有更多的人熟悉它們(另一方面,它們在技術上可能優於D)。

28

我使用Boost Jam進行跨平臺C++開發。我選擇它是因爲

  • 我希望我的代碼來構建無處不在加速建立,
  • 它採用了相對簡單的說明性語言,指定如何構建目標,並
  • 它可以建立各種不同口味的您在一次調用中執行二進制代碼(例如,調試與發佈,32位與64位,msvc與gcc),並在構建聲明中使用絕對最少的風味相關異常。

您可以使用特定於風味的設置來優化泛型規則,而不是爲每個風味變換編寫單獨的規則。語法並不完全是我所選擇的,但習慣並不難。

本文比較升壓果醬向CMake,SCons,就和Eclipse CDT:http://syrcose.ispras.ru/2009/files/04_paper.pdf

我的理解是,升壓果醬是由Boost社區保持Perforce的果醬的一個分支,而Perforce的果醬不積極維護(release notes已於2003年4月更新)。

當然,如果你不關心跨平臺開發,還有更簡單的方法可以去,正如其他人在這裏提到的。就我個人而言,我保留重新審視Eclipse CDT的意義; 5年前似乎沒有用,但我聽說它已經走了很長的路。

相關問題