2010-09-24 109 views
7

我開始了一個C++項目,我想在Eclipse(Linux)和vs2010中從同一個存儲庫同樣編譯好,並且可以使用一些幫助入門。儘管許多方面都可以單獨使用Google,但我一直希望就如何解決整體問題提供建議。例如,在哪裏保存圖書館資源,如何構建make文件,以及如何整合googletest(單獨在googletest上找到新手教程很難)。指向這些方面的教程的鏈接將非常棒,或者一系列教程可以幫助您。跨平臺C++項目入門

我的背景是在C#中,我試圖維護VS項目的「清潔」和組織。

+0

您是指Windows上的VS2010與Linux上的Eclipse之間的兼容性? Eclipse本身就是一個非常多平臺的IDE。 – Reinderien 2010-09-24 15:50:56

+0

是的,謝謝你的提問。 Eclipse正在Linux上運行(OpenSuse 11.3) – ccook 2010-09-24 15:53:01

回答

13

我已經完成了在兩個平臺上使用「native」構建系統的跨平臺項目(windows上的vsproj文件和linux上的makefile),但維護這兩個項目文件確實很痛苦。所以,是的,我同意其他建議,您應該嘗試從一個可靠的跨平臺構建實用程序開始。 CMake或可能Boost build看起來像不錯的選擇 - 可能還有很多其他的。

當涉及到第三方庫時,您會想要堅持那些經過嚴格跨平臺測試的東西。 Boost是最好的C++通用庫(是的,你看到它在幾乎所有的C++線程中都提到過......但那是因爲它真的是是一個很好的有用的東西集合)。至於XML,HTTP,圖片庫,用戶界面 - 這裏有所有良好的跨平臺選項 - 只要環顧四周或詢問是否有特定要求即可。無論你做什麼,都不要使用CodeProject或其他面向MS的網站的一些庫,這些網站只能用Visual Studio 6進行測試 - 這隻會導致不幸。這些天大部分的GNU庫都建立在Windows上,所以你應該對這些東西合理安全。

儘管它很誘人,但儘量在代碼中儘量減少平臺#ifdefs - 而不是儘可能地抽象庫中任何平臺特定的東西。

祝你好運!

+0

希望我可以做出多個upvote – Tim 2010-09-24 16:18:55

+0

關於'#ifdef與單獨的庫 - 將常用代碼放入一個庫中的基類並非不合理,然後擴展類來分離平臺特定的子類,這些子類使用多態性來改變特定於平臺的行爲。然後,唯一需要的#ifdef是管理使用哪個子類。 – Reinderien 2010-09-24 16:20:39

+0

關於ifdef /獨立庫,您還可以擁有一個通用頭文件,然後將源文件與共享cpp中的某些源以及僅在適當系統上構建的特定於平臺的文件中的一些源分開。 – 2010-09-24 17:30:39

4

有一件事我可以建議,如果你要強力跨平臺,並且希望所有事情儘可能「乾淨」:使用像Scons這樣的現代跨平臺構建工具來集中構建系統。它是用Python編寫的,它非常簡潔而且功能強大,並且它可以在任何地方使用。或者,如果您是Eclipse的粉絲,只需在Windows和GNU/Linux上安裝Eclipse即可。正如我上面提到的那樣,它是跨平臺的,你可以在各種不同的系統上爲編譯器工作。

+0

它看起來很有前途,但實現起來會有多困難?我只是把自己包裹起來 – ccook 2010-09-24 15:56:43

+3

在我的愚見中,讓語法非常哈克。如果你瞭解它的歷史,它永遠不會成爲一個公共的,大規模的構建解決方案。難以擴展,難以維護並且人類可解析性很差。只要看看在混淆(automake和他們的親屬)之上堆砌混淆的工具的數量。另一方面,Scons簡直就是Python,並且有大量實例記錄。 – Reinderien 2010-09-24 16:11:06

+0

@ccook:SCons更加自動化,並且由於您擁有python的全部功能,您可以使用'glob.glob'和'os。listdir'來獲取目錄中的文件列表,從而避免維護文件列表... – 2010-09-24 16:11:57