web-dev-qa-db-ja.com

Eclipse-「このプロジェクトはCDTプロジェクトではありません」

既存のCコードと既存のMakefileがあり、それらをEclipse Cプロジェクトにラップしたいと思います(Eclipse 3.4 Ganymedeを使用)。コードは次のように構成されています。

メインディレクトリ:/Project/Software

ソースファイルとヘッダーファイル:../Project/Software/CodeDir1 ../Project/Software/CodeDir2など。

これまで私はこれらのステップを実行してきました:

  1. Eclipseworksapceを/ Project /に設定します
  2. Software->という名前で新しいCプロジェクトを作成します。これで、Eclipseはすべてのソースファイルなどをプロジェクトに統合します。
  3. [プロパティ]-> [C/C++ビルド]に移動し、[カスタムビルドオプション]に設定します

初めてこれを行うと、すべてが正常に機能します。私は自分のコンソールに出力を取得し、すべてがクールです。しかし、その後、「ビルドアイコン」(小さなハンマー)がグレー表示になり、クリックできなくなります。プロジェクトのプロパティ-> C/C++ビルドに移動すると、「このプロジェクトはCDTプロジェクトではありません」と表示され、「Java.lang.NullPointerException」というエラーが表示されます。

どうすればプロジェクトを実行できますか?

編集:

単純なバグを回避するために、新しいバージョンのEclipse(Kepler)で同じことを試しました。同じエラー(「CDTプロジェクトなし」)が発生しますが、NullPointer例外はありません。

しかし、問題を少し絞り込むことができます。first makeプロセスを開始すると、常に機能します。ビルドプロセスが失敗した場合でも、ビルドプロパティに移動できます。 1つ取得するとすぐに完全でエラーなしビルドを実行すると、この問題が発生します。これに関しては、Eclipseからmakecallが実行された場合にのみ発生します。コマンドラインから呼び出すと、Eclipseから1つを使い果たすことができます。

13
Toby

問題の原因はEclipseではなく、makefileにあります。

プロジェクト全体のディレクトリ構造は次のとおりです。

Project_Dir\Documentation\
Project_Dir\Output\
Project_Dir\Software\
Project_Dir\Tools\

ソースファイルはすべて\Software\ディレクトリにあります。そこで、プロジェクトフォルダとしてProject_Dir\Software\を選択しました。これは、.projectファイルと.cprojectファイルがそこにあることを意味します。

Makefile自体は、出力ファイルを\Software\フォルダーにも一時的に書き込みます。最後に、すべてのファイルをSoftwareディレクトリからOutputにコピーします(実際にはmove *.* Project_Dir\Output\コマンド)

このコマンドはEclipseプロジェクトファイルも移動していたため、Eclipseがそれらを見つけてプロジェクトプロパティを開くのが困難になりました。

2つの解決策:

  1. とにかくすべてプロジェクト関連のものなので、Eclipseのプロジェクトディレクトリを\Project_Dir\に変更します
  2. Makefileに次の2行を追加します。moveコマンドの前:moveコマンドの後のattrib +r +s *.projectattrib -r -s *.project。 (.cprojectについても同じです)。これにより、メイクファイルがファイルを移動できなくなります
0
Toby

既存のCDTプロジェクトをインポートしていて、「このプロジェクトはCDTプロジェクトではありません」と表示されている場合は、プロジェクトが古いバージョンのEclipseで作成されている可能性があり、次のことを行う必要があります。

  • Project Explorerタブでプロジェクトを選択します。
  • [ファイル]-> [新規]-> [C/C++プロジェクトに変換]をクリックします

これにより、新しい.cprojectファイルが追加され、準備が整います。

29
mirams

新しいプロジェクトを作成するときは、それをmakefileプロジェクトとして作成する必要があります。その後、makeを使用してプロジェクトをビルドしますが、ビルドプロパティの設定は、makefileとmake呼び出しを介して行う必要があります。

これ link は、メイクファイルプロジェクトを作成する方法を示しています。

プロジェクトを作成するには:

[ファイル]> [新規]> [プロジェクト]を選択します。

新しいプロジェクトを作成するときは、プロジェクトタイプを指定する必要があります。このプロジェクトタイプは、CDTが使用/表示するツールチェーン、データ、およびタブを決定します。

作成するプロジェクトのタイプを選択します。このチュートリアルでは、C/C++フォルダーを展開し、C++プロジェクトを選択します。 C++プロジェクトウィザードが開きます。イラストを見るにはここをクリックしてください。

デフォルトでは、これらのリストに現在表示されているツールチェーンとプロジェクトタイプのCDTフィルターは、このチュートリアルで選択したC++プロジェクトウィザードの言語サポートに基づいています。

「プロジェクト名」フィールドに「HelloWorld」と入力します。 [デフォルトの場所を使用]オプションを選択したままにします。

次に、作成するプロジェクトのタイプを選択します。新規CDTプロジェクトウィザードでは、次のプロジェクトタイプから選択できます。実行可能-実行可能アプリケーションを提供します。このプロジェクトタイプフォルダには、3つのテンプレートが含まれています。 Hello World C++の例では、main()を使用した単純なC++ HelloWorldアプリケーションを提供しています。 Hello World ANSI Cの例では、main()を使用した単純なC HelloWorldアプリケーションを提供しています。空のプロジェクトは、ファイルを含まない単一のソースプロジェクトフォルダーを提供します。このテンプレートを選択すると、プロジェクトタイプに必要なメタデータファイルのみを含むプロジェクトが作成されます。プロジェクトのターゲットのソースファイルを提供する必要があります。実行可能プロジェクトタイプのメイクファイルは、CDTによって自動的に作成されます。

  1. 共有ライブラリ-個別にコンパイルおよびリンクされる実行可能モジュール。共有ライブラリ(libxx.so)を使用するプロジェクトを作成するときは、共有ライブラリのプロジェクトをアプリケーションのプロジェクト参照として定義します。このプロジェクトタイプの場合、CDTはオブジェクトファイルを結合して結合するため、オブジェクトファイルは再配置可能であり、多くのプロセスで共有できます。共有ライブラリには、libxx.so.versionの形式を使用して名前が付けられます。ここで、versionは、デフォルトが1の番号です。libxx.soファイルは通常、最新バージョンへのシンボリックリンクです。このプロジェクトタイプのメイクファイルは、CDTによって自動的に作成されます。
  2. 静的ライブラリ-別のアプリケーション(libxx.a)にリンクできるオブジェクトファイルのコレクション。 CDTは、オブジェクトファイル(つまり。o)を、実行可能ファイルに直接リンクされているアーカイブ(。a)に結合します。このプロジェクトタイプのメイクファイルは、CDTによって自動的に作成されます。
  3. MakefileProject-メタデータファイルなしで空のプロジェクトを作成します。この選択は、既存のメイクファイルベースのプロジェクトをインポートおよび変更する場合に役立ちます。このプロジェクトタイプの新しいメイクファイルは作成されません。
3
Steve Barnes

「VisualC++サポート」のような対応するCDTプラグインをインストール/更新することで、これを克服することができました。

0
Sergei