Eclipse CDT 8.1.0 で生成された自動依存関係ルールが正しくないようです。問題を説明するために、空の実行可能プロジェクトを作成し、2 つのファイルを追加しました。
test.cpp :
#include "SomeOtherHeader.h"
int main(void){return 0;}
および SomeOtherHeader.h (空)
このプロジェクトをコンパイルすると、Eclipse によって、プロジェクト ディレクトリに "Debug" フォルダーが生成され、makefile の subdir.mk がインクルードされます。
Debug/subdir.mkの内容:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
CPP_SRCS += \
../test.cpp
OBJS += \
./test.o
CPP_DEPS += \
./test.d
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.cpp
@echo 'Building file: $<'
@echo 'Invoking: GCC C++ Compiler'
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
-MT"$(@:%.o=%.d)"
MTオプションはファイルDebug/test.dに無意味な依存関係を作成するため、私が懸念する行です
test.d: ../test.cpp ../SomeOtherHeader.h
../SomeOtherHeader.h:
Debug/subdir.mk を に変更-MT"$(@:%.o=%.d)"
する-MT"$@"
と、より適切な Debug/test.d が生成されます。
test.o: ../test.cpp ../SomeOtherHeader.h
../SomeOtherHeader.h:
「-MT」文字列が managedbuilder.core Java コードでハードコーディングされているようです。
$ unzip -p /usr/lib64/eclipse/dropins/cdt/eclipse/plugins/org.eclipse.cdt.managedbuilder.core_8.1.0.201206111645.jar | strings | grep '\-MT'
-MT"
-MT"$(@:%.o=%.d)"
-MT"
-MT"$@"
-MT"$(@:%.d=%.o)"
勝者のオプションがそこにあるように見えます-MT"$@"
が、マネージドビルダーにそれを使用するように指示するにはどうすればよいですか? -MT"$(@:%.o=%.d)"
実用的な目的に役立ちますか?
このサイトに投稿するのは初めてなので、簡単にしてください :)