2

Eclipse CDT 8.1.0 中生成的自动依赖规则似乎不正确。为了说明问题,我创建了一个空的 Executable 项目并添加了两个文件。

测试.cpp

    #include "SomeOtherHeader.h"
    int main(void){return 0;}

SomeOtherHeader.h(它是空的)

编译这个项目会导致 Eclipse 在项目目录中生成“Debug”文件夹,其中包含 subdir.mk makefile。

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)"为更合理的 Debug/test.d:-MT"$@"

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"$@"在那里,但我如何指示 managedbuilder 使用它?有-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 回答