web-dev-qa-db-ja.com

CMakeプロジェクトをEclipse CDTにインポートする

ネイティブ CMake プロジェクトがあり、 Eclipse IDEを使用したいので、autoを提供することで開発が容易になります。 -completeおよびその他の機能。CMakeプロジェクトをEclipseにインポートする方法が見つからないようです。

PS:私はCMakeでうまく機能する他のIDEの提案をお待ちしています。

32
rajat

KDevelop はすばらしいCMakeサポートを備えた素晴らしいIDEです。

Eclipseの場合-これを実行します。

cd <project_dir>
cmake -G "Eclipse CDT4 - Unix Makefiles" ./

これにより、Eclipseプロジェクトが作成されます。

36
arrowd

Eclipseに対するarrowdの回答について詳しく説明します。

まず、CMakeファイルのディレクトリを選択します。私はEclipseワークスペースを~/workspacesに、ソースコードを~/srcに保持することを好みます。プロジェクトをビルドまたはテストするために必要なデータは、プロジェクトのワークスペースディレクトリのサブディレクトリに移動するので、CMakeでも同じようにすることをお勧めします。

ワークスペースフォルダーとソースフォルダーの両方にsomeprojectという名前が付いているとすると、次のようにします。

cd ~/workspaces/someproject
mkdir cmake
cd cmake
cmake -G "Eclipse CDT4 - Unix Makefiles" ~/src/someproject

次に、Eclipseワークスペースで次のようにします。

ファイル>インポート...>一般>既存のプロジェクトをワークスペースに

ルートディレクトリの選択を確認し、~/workspaces/someproject/cmakeを選択します。 プロジェクトをワークスペースにコピーがチェックされていないことを確認してください。

完了をクリックすると、ワークスペースにCMakeプロジェクトがあります。

注意すべき2つの点:

  • ワークスペースのサブディレクトリにはcmakeを使用しましたが、任意の名前を使用できます。
  • ビルド構成に変更を加える場合(Makefile.amの編集など)、Eclipseが変更を取得できるように、最後のコマンドを再実行する必要があります。
22
user149408

CMakeのCDTプロジェクトジェネレータ メンテナンスされていないように見える であることを知り、さまざまな問題を引き起こしています。特に、それ以降のバージョンのEclipse(共有しているもの)で特にそうです。

推奨事項は、CMakeLists.txtを唯一の真のソースとして使用するcmake4Eclipse(Eclipse Marketplaceから入手可能)を使用することです。また、ソースツリーをワークスペースから分離しておくこともできます。

  • Eclipseで、File> New> C Projectを選択します。
  • プロジェクト名を入力し、ソースツリーのルートをプロジェクトの場所として選択します。
  • プロジェクトタイプとしてExecutable> Empty Projectを選択し、デフォルトのツールチェーンを受け入れます。
  • Finishをクリックすると、ワークスペースにCMakeプロジェクトが作成されます。
4
user149408

つまり、現在実行可能なオプションはCDTジェネレーターだけです。どうして? Eclipseがプリプロセッサの定義、インクルードパス、およびビルドに含まれるファイルをどこかから取得する必要があるからです。そうしないと、正しいマクロが定義されていないと、すべてのインデックスが作成されてしまいます。リポジトリ、または中規模または大規模のツリーを強化した場合、すべてのインデックスを作成しても現実の世界では機能しません。Eclipseのインデクサーの速度と信頼性がなければ、とは言えません。ほとんどの人はおそらく最近のビルドにNinjaを使用したいので(何がダーティかを確認するためにウォームビルドを30秒以上待ちたいと思っていますか?)、現在サポートされているメイクファイルを介してこの情報をインポートする唯一の方法は除外されています。構成するたびに2つの個別のビルドシステムを生成する必要がある場合を除き、自動化は実際の苦痛になります(リストが変更されたときにcmakeが再実行される場合)。

Eclipse Photonには、cmakeプロジェクトを直接インポートする新しいオプションがあります。ただし、この段階では、既に構成済みのビルドディレクトリや、渡される変数や引数を設定するための場所をインポートする方法がないように見えるため、簡単なプロジェクト以外にはほとんど役に立たないと思われます。 cmake。この機能が実際にどのように機能するかはまだわかりませんが、EclipseはCMakeListsの階層を解析し、どのadd_subdirectory()コールが行われたか、どのプリプロセッサ定義が設定されているかを確認するロジックに従っているように見えます。 cmakeサーバーモードがこれに完全に対応していることを考えると、未来のないアプローチです。これを機能させるには、ほぼすべてのcmake言語パーサーをEclipseに再実装する必要があります。

これまでのところ、実際の要件を満たしていると思われる唯一の実行可能なソリューションは、cmake CDTジェネレーターを使用することです。 cmakeの内部から直接上記の情報を取得し、.cprojectファイルに書き込むことができます。前述のように、これは実際には維持されておらず、.cprojectの古いテンプレートに依存しているため、いくつかの問題が発生します。

Cmakeサポートのための私自身の最小要件は次のとおりです。

  • 構成済みのプロジェクトをインポートする機能。大規模なビルドシステムでは、多くの場合、スクリプトを使用して、コマンドラインでcmakeに多数の変数を渡します。
  • インデックスを作成するのは、ビルドシステムの一部のみです。
  • ソースツリー外のビルドで動作する必要があります。
  • インデックス作成を機能させるには、プリプロセッサ定義を使用し、ビルドシステムからのパスを含める必要があります。
  • Ninjaジェネレーターで動作する必要があります(つまり、メイクファイルは生成されません)。

現在のところ、CDTジェネレーター以外のもので上記のいずれを行う方法がわかりません。実際に機能する洗練されたソリューションを実現する唯一の方法は、cmakeのジェネレーターでハッキングするか、生成された.cprojectを後処理してインデックス付けされるものについて選択的です(つまり、CMAKE_SOURCE_DIRECTORYのすべてではありません)。これは別のハックです(cmakeには構成ステップに構成後のタスクをアタッチする方法がないため、プロセスをフォークし、親cmakeの終了を監視する必要があります。これは、cmakeに代わる意図的な決定です開発者は明らかに、そしておそらくそうでしょう)

私は確かに本当に良いアプローチの情報を本当に感謝します。 Eclipseでのcmakeサポートの状態は、C++開発用であるはずのツールにとってかなり悲惨です。インデクサー(少なくとも、Eclipseの再起動を必要とする通常のロックアップに悩まされていない場合)は、実際には最高の機能の1つであり、Eclipseはコードをジャンプするのに非常に優れた環境です。

2
kdm

次のようにします。

mkdir debug(またはリリース、またはその他の名前)

cd debug
cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_Eclipse_GENERATE_SOURCE_PROJECT=TRUE -DCMAKE_Eclipse_MAKE_ARGUMENTS=-j3 -DCMAKE_Eclipse_VERSION=4.1 ../

正しいEclipseバージョンを設定していることを確認してください

次に、Eclipseからフォルダーを開きます(プロジェクトを開く)。

1
Nadav B

私のデスクトップ上の1つのシンプルなソリューション:

  1. Eclipseの場合:New -> New C/C++ Project -> Empty or Existing CMake Project、プロジェクト名を選択します(例:プロジェクト)。
  2. 古いディレクトリのすべてのファイルを新しいディレクトリにコピーします(プロジェクトへのパス)。
1
emmmphd