2

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)"実用的な目的に役立ちますか?

このサイトに投稿するのは初めてなので、簡単にしてください :)

4

1 に答える 1

2

-MT"$@"のコンパイラフラグに追加しProject Properties->C/C++ Buid->Settings->GCC Compiler->Miscellaneous->Other flagsます。Eclipseは、このフラグをmakefile内のコンパイル行に追加するだけです。ファイル内の出力test.dは次のようになります。

test.o test.d: ../test.cpp ../SomeOtherHeader.h

../SomeOtherHeader.h:
于 2013-02-20T13:12:15.107 に答える