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)"
什么实际用途吗?
这是我第一次在这个网站上发帖,所以请放轻松:)