自动依赖不能使用eclipse CDT C ++项目

时间:2013-02-13 02:23:16

标签: g++ eclipse-cdt

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

TEST.CPP

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

SomeOtherHeader.h (这是空的)

编译此项目会导致Eclipse使用subdir.mk makefile include在项目目录中生成“Debug”文件夹。

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)"是否符合实际目的?

这是我第一次在这个网站上发帖,所以对我来说很容易:)

1 个答案:

答案 0 :(得分: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: