同じ 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 のメニューバーから Project → Build All を選択したときと同じ挙動です。
Build All
を発動させている Java Gradle (Buildship) に問題があるような気もしますが仕方ありません。C/C++プロジェクト側で対処してみましょう。
Eclipse のメニューバーから Window → Preferences を開きます。
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) に切り替えてみても、 何も実行されていないことが確認できます。
これで対策完了です。