[英]Eclipse, CDT, add custom step in “clean” step
我有几个生成源文件的shell脚本。 除了最终的结果文件外,它们还创建一些构件,例如日志文件,临时对象,以便在出现问题时更容易进行调试等。 当我选择“项目->清洁...”会删除所有生成的文件时,我想在运行的过程中添加自定义步骤。 我正在使用自动生成的Makefile,并希望避免编写自己的文件。 不是,我不能,我只是愿意花时间做更多的实际工作,而不是笨拙的管理。
这是一种可以正常工作的“清理”文件( 带有映射文件的特定示例 )的方法。
要清理多个文件,您可以添加多个“构建器”-每个文件一个。 或者,创建一个脚本,将它们全部清除。
要在使用“清洁”时管理地图文件的删除 :
注意:构建每个目标(通常是Debug和Release)以为下面的“ Refresh”步骤创建文件夹
将默认名称“ New_Builder”替换为有意义的名称。 对于此示例:
删除地图文件
在位置:编辑框中输入程序的名称。
/斌/ RM
输入命令所需的参数
$ {project_loc} / $ {CONFIG_NAME:$ {} PROJECT_NAME} / $ {} PROJECT_NAME .MAP
单击刷新选项卡,然后选择适当的设置。 对于此示例:
完成后启用刷新资源
递归取消选中子文件夹
选择特定资源
单击指定资源...按钮
展开特定项目,并在“调试”和“发布”旁边放置一个复选标记
按完成按钮。
单击“ 构建选项”选项卡,然后选择适当的设置。 对于此示例:
取消选中“ 分配控制台”(输入必需)
仅在“ 运行构建器 ”部分中选中“清洁”期间的选项:
按确定按钮。
@jędrzej-dudkiewicz
哇! 我花了大约一个工作日来解决完全相同的问题,现在我读了您的帖子...但是我想提出更“准确”的问题解决方案:您需要添加带有伪造目标的新规则,比如说superclean
, (例如) makefile.targets
文件-它会包含在主makefile
; 那么您需要在项目属性对话框的“ C / ++ Build”的“ Behaviour”页面的“ Behaviour”页面的“ Clean”字段中添加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
我找到了以下解决方案:在属性,C / C ++构建,构建器设置,构建器中,有“构建命令”框和“使用默认构建命令”复选框。
所以这很简单,尽管很脏-我用“ customMake”替换了“ make”-它拦截了调用,检查了“ clean”参数并执行了我选择的脚本。
很可能有更好的解决方案,但是我没有运气找到它。
还有另一种方式。 在项目的根目录中创建文件makefile.targets,并从Release / Debug / Whatever目录中创建由makefile执行的规则“干净”重复步骤,并在其中添加自定义步骤。 例:
clean:-$(RM)$(OBJS)$(C_DEPS)$(ARCHIVES)libmpos.a echo这里放置自定义步骤
不幸的是发出关于规则覆盖的警告:
../makefile.targets:2:警告:覆盖目标clean' makefile:52: warning: ignoring old commands for target
命令clean' makefile:52: warning: ignoring old commands for target
清洁的clean' makefile:52: warning: ignoring old commands for target
'
但是它有效,并且似乎比以前的解决方案更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.