Eclipse CDTプロジェクトがすべてビルドされてしまう
  C/C++, Java, プログラミング

同じEclipseワークスペースにC/C++プロジェクトだけでなくJavaプロジェクトも混在させていると、不意にすべてのC/C++プロジェクトのビルドが実行されてしまうことがあります。

C/C++プロジェクトとJava Gradleプロジェクトの混在

私はEclipse IDE for Java DevelopersにC/C++ Development Tooling(CDT)プラグインを追加してC/C++とJavaの開発をしています。同じワークスペースにC/C++プロジェクトとJavaを混在させています。C/C++はMakefileプロジェクト、JavaはGradleプロジェクトです。Eclipseのバージョンは Oxygen.2 Release (4.7.2)です。

Gradleタスクを実行するとC/C++プロジェクトがビルドされる?

このようにC/C++プロジェクトとJava Gradleプロジェクトを同じワークスペースに混在させている環境で、Gradleタスクを実行すると なぜか すべてのC/C++プロジェクトのビルドが実行されてしまうという謎の現象が発生します。

JavaプロジェクトのGradleタスクを開始すると・・・

なぜか、すべてのC/C++プロジェクトのビルドが始まります。

C/C++プロジェクトにエラーがなくビルドが成功する状態であれば、

make: Nothing to be done for 'all'.

と表示されて実質的には何もおこなわずすぐに終了します。しかし、C/C++プロジェクトにエラーがあってビルドが完了しない状態だと毎回コンパイルが実行されてCPU負荷も高い状態になります。

また、ビルド済みでmake allからすぐに復帰する場合であっても、Gradle ExecutionsビューからConsole(CDT)に勝手に表示が切り替わってしまうという煩わしさもあります。

Build Allが実行されている!

どうやらGraldeタスクを実行したときにワークスペース全体のBuild Allが実行されているようです。これはEclipseのメニューバーから ProjectBuild All を選択したときと同じ挙動です。

Build Allを発動させているJava Gradle (Buildship)に問題があるような気もしますが仕方ありません。 C/C++プロジェクト側で対処してみましょう。

Eclipseのメニューバーから WindowPreferences を開きます。

Preferencesウィンドウの左側のツリーを展開して C/C++Build を表示します。下部の Build configurations only when there are Eclipse resource changes within the project and its references にチェックを入れて Apply and Close を押します。

この設定を有効にすると、C/C++プロジェクトのファイルが更新されている場合のみビルドを実行するようになります。

もう一度、Gradleタスクを実行してみましょう。

上手くいきました。Gradle Executionsビューが表示されたままでConsoleビューに切り替わることはなくなりました。手動でConsole(CDT)に切り替えてみても、何も実行されていないことが確認できます。

これで対策完了です。