Eclipse CDTプロジェクトがすべてビルドされてしまう

同じ 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 に切り替えてみても 何も実行されていないことが確認できます。

これで対策完了です。

この記事を共有しませんか?