2014-10-29 123 views
1

我有几个生成源文件的shell脚本。除了最终的结果文件之外,它们还创建了一些工件,如日志文件,临时对象以便在出现问题时进行调试等等。我想在选择“Project - > Clean ...”时将自定义步骤添加到流程运行中,以删除所有生成的文件。我使用自动生成的Makefiles,并希望避免写我自己的。并非我不能,我只是宁愿花时间做更多的实际工作而不是繁琐的管理。Eclipse,CDT,在“clean”步骤中添加自定义步骤

回答

0

我发现了以下解决方案:在属性中,C/C++ Build,Builder Settings,Builder中有“Build command”框和“Use default build command”复选框。

所以它很简单,虽然很脏 - 我用“customMake”取代了“make” - 它拦截调用,检查“干净”参数并执行我选择的脚本。

很有可能有更好的解决方案,但我没有找到它的运气。

还有另一种方法。在项目的根目录下创建文件makefile.targets,并创建规则'clean',通过从Release/Debug /无论目录执行makefile来重复步骤,并在其中添加自定义步骤。例如:

清洁: - $(RM)$(OBJS)$(C_DEPS)$(存档)libmpos.a 回声PLACE自定义的步骤这里

不幸的是使发出警告规则重写:

../makefile.targets:2:warning:覆盖目标clean' makefile:52: warning: ignoring old commands for target干净的命令'

但它的工作原理和似乎是比以前更好的解决方案。

1

@jędrzej-dudkiewicz

哇!我花了大约一个工作日来解决完全相同的问题,现在我读了你的文章... 但我想提出更多的“准确”的问题修复:你需要添加新的规则与假目标,比如说superclean, (例如)makefile.targets文件 - 它将包含在主makefile;那么您需要在项目属性对话框的“C/++ Build”的“行为”页面中将superclean(将其与其他已列出的目标空间分隔开)添加到相应的“Clean”字段。瞧!

编辑:

不幸的是提到的方法可能会产生一些不良影响。事实是,这是由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值。虽然这种变体可以工作还没有,只要你不会在你的项目的makefile插入规则这样一个

%.d: %.o 
    ... 

地方。因为在这种情况下make可能会尝试生成包含缺席的.d文件。

所以我认为还有一种方法可以解决这个问题:在项目清理过程中,将(想要删除的)(自动)生成的文件列表附加到这里提到的变量之一:

# Other Targets 
clean: 
    -$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) oc 
    [email protected] ' ' 

这是自动生成makefile的报价。你可以这样做:

ifneq ($(findstring clean,$(MAKECMDGOALS)),) 
EXECUTABLES+=$(LIST_OF_THE_GENERATED_FILES) 
endif 
+0

不错!我从来没有找到它,虽然我一直在寻找一天,就像你一样。好吧,我想别人会来,并告诉我们如何以更好的方式做到这一点:) – 2015-01-27 21:27:09