2012-05-14 25 views
3

我是來自C#.NET和Visual Studio背景(以及一些Objective-C/XCode)的C++的新手。如何編寫在IDE之間工作的C++代碼?

我想用C++編寫跨平臺(Windows,OS X,Linux)應用程序。我從我的Mac上的TextMate和Windows上的記事本開始,在命令行/終端上使用g ++編譯代碼以在其平臺上構建可執行文件。

我弄糊塗了,當我開始使用IDE(即VC++的XCode,並Eclipse的)。我在粘貼我的代碼之前嘗試了所有三個並創建了項目。如果我在一個IDE中開始編輯,我不知道如何讓最終的代碼片段在不同的平臺上編譯。

例如,如果我有一個類文件 - foo.cpp。在Eclipse中,它將生成foo.cpp(在其中的一個foo.h,foo::foo())和一個單獨的foo.h頭文件(在其中一個FOO_H_文件等)。在Xcode中,它生成一個文件夾Foo constains main.cppfoo.l) - 就是這樣。爲什麼區別?

我雖然C++代碼只是C++代碼,如果在該平臺上編譯,它就會生成特定於平臺的可執行文件。 (例如,在Mac上編譯,它將成爲Mac可執行文件;如果在Windows上編譯,它將成爲Windows可執行文件)。

看來,一旦我開始使用IDE,由於所有這些我不瞭解的自動生成的文件,我的C++代碼自動變得不可移植。我嘗試同時閱讀XCode,Eclipse和Visual Studio中的文檔,這讓我更加困惑。我只想寫C++ ...

我也是繼Stroustrup的經典文本拿起C++並在書中,沒有像頭或.h_H_文件的源被提及,因爲爲什麼所有這些文件被生成。

除了使用Notepad/Textmate + G ++編譯器外,我如何在可以跨平臺的IDE中編寫純粹的,可移植的C++程序,或者甚至有可能?

+2

您需要頭文件來在編譯單元和庫接口之間共享其他使用者的類定義。如果你在一個文件中做所有事情,那麼你不需要它們。其他項目模板可能僅僅是該平臺的有用的東西,例如VC創建stdafx.h以用作預編譯頭文件,以便在構建時加速包括所有Windows API頭文件等。如果您擔心,請丟棄模板項目生成的文件,並從一個空文件開始。 – Rup

+1

而'FOO_H_'等是[include guard](http://en.wikipedia.org/wiki/Include_guard) - 這是一種避免重新解析頭文件兩次的機制,如果在相同的彙編中包含它兩次單位通過不同的路線等 – Rup

回答

2

默認(=最常用的),用於調用Foo C++類文件結構由稱爲foo.h其中將包含的Foo類定義頭文件中,並且其包含的Foo的方法的定義中的foo.cpp

通常所有的頭文件都放在一個名爲include的獨立文件夾中。

所以一般方法有相同的文件/文件夾結構,它可用於多個IDE是:

  • 手動創建的文件夾結構(例如includesrcmake文件夾中的項目中文件夾MyProject,IDE的項目文件將進入make,.h文件到include和.cpp文件到src中)
  • 使用explorer/finder /手動爲您的類創建.h和.cpp文件。
  • 使用「添加現有文件」或類似的東西將這些文件添加到您的IDE的項目文件。
  • 如RUP指出,爲Visual Studio,應該使用「空項目」預設,或者它會增加你沒有一些頭文件要
+0

+1。只是一句話:大多數IDE(例如Eclipse,MSVC)允許創建.cpp和.h文件(併爲它們指定一個文件夾),因此不需要使用explorer來創建源文件。此外,Eclipse默認保持項目文件夾與文件系統結構同步,因此可以使用IDE完成目錄創建(只需在項目中創建一個子文件夾) – user396672

1

使用CMake的或其他元構建系統 使用升壓和Qt儘可能多地抽象平臺。

CMake允許您爲大多數IDE生成項目文件:這意味着在平臺和IDE之間切換時:您只需告訴CMake爲該平臺上使用的IDE生成新的項目文件。

最容易在windows,linux和mac上獲得平臺相關的代碼是使用QtCreator作爲IDE,它也有很多很好的教程。 http://qt.nokia.com/downloads

+1

我的OP已經很難過了,現在「CMake」,「Use Boost 「和」Qt「... huarrrrr – KMC

+0

Boost和Qt是庫,如果你使用它們將隱藏大部分平臺特定的細節。這意味着這將避免在你的代碼 –

+0

中編寫#ifdef _WIN32 ....對於爲你帶來許多新事物感到抱歉,你正在學習C++,我應該注意到這一點。更新了答案並鏈接到了一個IDE,它可以讓你用平臺相關的方式編寫代碼,並且所有平臺都存在相同的IDE,所以你只需要學習ONE。 –

1

爲什麼不使用1個IDE? Eclipse是跨平臺的IDE

+1

這是對的,如果你打算讓大量的人自己編譯你的項目,你只需要支持多個IDE。如果你打算自己編譯它,那麼你可以在一個IDE中使用多個編譯器。 –