3

私はC#.NET と Visual Studio のバックグラウンド (および一部の Objective-C / XCode)からC++を初めて使用します。

C++ でクロスプラットフォーム (Windows、OS X、Linux) アプリケーションを作成したいと考えています。Mac では TextMate、Windows ではメモ帳から始め、コマンド ライン/ターミナルで g++ を使用してコードをコンパイルし、そのプラットフォームで実行可能ファイルをビルドしました。

IDE (つまりVC++XCode、およびEclipse )を使い始めたときに混乱しました。コードを貼り付ける前に、3つすべてを試してプロジェクトを作成しました。1 つの IDE で編集を開始すると、最終的なコード片を別のプラットフォームでコンパイルする方法がわかりません。

たとえば、クラスファイルがある場合 - foo.cpp. Eclipse では、foo.cpp(その中にfoo.h, foo::foo()) と別のfoo.hヘッダー ファイル (その中にFOO_H_ファイルなど) が生成されます。Xcode では、フォルダFooconstainsmain.cppfoo.l) を生成します - それだけです。違いはなぜですか?

C++ コードは、そのプラットフォームでコンパイルされた場合にプラットフォーム固有の実行可能ファイルを生成する単なる C++ コードだと思います。(たとえば、Mac でコンパイルすると、Mac 実行可能ファイルになります。Windows でコンパイルすると、Windows 実行可能ファイルになります)。

IDE を使い始めると、C++ コードが自動的に移植できなくなったようです。これは、理解できない自動生成ファイルが原因です。XCode、Eclipse、および Visual Studio のドキュメントを同時に読んでみると、さらに混乱します。私はただC++を書きたいだけです...

また、Stroustrup の古典的なテキストに従って C++ を取り上げていますが、この本では、これらのファイルがすべて生成された理由について、ヘッダーやファイルのソースなどは何も言及されてい.hません。_H_

メモ帳/Textmate + G++コンパイラを使用する以外に、クロスプラットフォームであるIDEで純粋で移植可能なC++プログラムを作成するにはどうすればよいですか?

4

3 に答える 3

2

と呼ばれる C++ クラスのデフォルト (=最も一般的に使用される) ファイル構造は、 のクラス定義を含むとのメソッドの定義を含むFooと呼ばれるヘッダー ファイルで構成されます。foo.hFoofoo.cppFoo

多くの場合、すべてのヘッダー ファイルは、include.

したがって、複数の IDE で使用できる同じファイル/フォルダー構造を持つ一般的なアプローチは次のとおりです。

  • フォルダ構造を手動で作成します (たとえば、includeプロジェクトフォルダ内のフォルダ、IDE のプロジェクト ファイルは make に、.h ファイルは include に、.cpp ファイルは src に)。srcmakeMyProject
  • エクスプローラー/ファインダー/...を使用して、クラスの.hおよび.cppファイルを手動で作成します
  • 「既存のファイルを追加」または同等のものを使用して、それらのファイルを IDE のプロジェクト ファイルに追加します。
  • Rupが指摘したように、Visual Studioの場合、「空のプロジェクト」プリセットを使用する必要があります。そうしないと、不要なヘッダーファイルが追加されます
于 2012-05-14T09:45:48.990 に答える
1

CMakeまたは他のメタビルドシステムを使用するBoostとQtを使用して、可能な限り多くのプラットフォームを抽象化します。

CMakeを使用すると、ほとんどのIDEのプロジェクトファイルを生成できます。つまり、プラットフォームとIDEを切り替えるときに、そのプラットフォームで使用するIDEの新しいプロジェクトファイルを生成するようにCMakeに指示するだけです。

Windows、Linux、Macでプラットフォームに依存しないコードを取得するのが最も簡単なのは、QtCreatorをIDEとして使用することです。また、優れたチュートリアルもたくさんあります。http://qt.nokia.com/downloads

于 2012-05-14T09:48:11.413 に答える
1

すべてに対して 1 つの IDE を使用しないのはなぜですか? Eclipse はクロスプラットフォーム IDE です

于 2012-05-14T10:11:50.163 に答える