@jędrzej-dudkiewicz
哇!我花了大约一个工作日来解决完全相同的问题,现在我阅读了您的帖子...
但我想提出更“准确”的问题解决方法:您需要添加带有虚假目标的新规则,比如superclean,到(例如)makefile.targets 文件中——它将包含在主@987654323 中@;那么您需要在项目属性对话框中的“C/++ Build”的“行为”页面的“行为”页面中添加superclean(用空格将其与已经列出的其他目标隔开)。瞧!
编辑:
不幸的是,提到的方法可能会产生一些不良影响。事实上,Eclipse CDT 生成的makefile 有这样的行:
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
endif
当您尝试清理您的项目时,make 将尝试包含*_DEPS 变量中列出的文件。这是因为ifneq ($(MAKECMDGOALS),clean) 不起作用,因为反过来,$(MAKECMDGOALS) 在我们的例子中拥有superclean clean 值。尽管只要您不插入这样的规则,此变体可能仍然有效
%.d: %.o
...
在您项目的makefile 中的某个位置。因为在这种情况下make 可能会尝试生成不存在的.d 文件。
所以我认为还有另一种方法可以解决此问题:只需将您希望在清理项目期间删除的(自动)生成文件的列表附加到此处提到的变量之一:
# Other Targets
clean:
-$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) oc
-@echo ' '
这是来自自动生成的makefile 的引用。你可以这样做:
ifneq ($(findstring clean,$(MAKECMDGOALS)),)
EXECUTABLES+=$(LIST_OF_THE_GENERATED_FILES)
endif