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)"
是否符合实际目的?
这是我第一次在这个网站上发帖,所以对我来说很容易:)
答案 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: