我有几个shell脚本生成源文件。除了最终的结果文件外,它们还会创建一些工件,例如日志文件,临时对象,以便在出现问题时更容易调试等等。当我选择“Project - > Clean ...”时,我想在流程运行中添加自定义步骤,这将删除所有生成的文件。我正在使用自动生成的Makefile,并希望避免自己编写。并非我不能,我只是宁愿花时间做更多的实际工作而不是繁琐的管理。
答案 0 :(得分:2)
这是一种清洁"一个文件(带有地图文件的具体示例)应该可以正常工作。
要清理多个文件,您可以添加多个“建筑商”' - 每个文件一个。或者,创建一个可以一起清除它们的脚本。
使用"清理" 时管理地图文件的删除:
注意:构建每个目标(通常是Debug和Release)来为" Refresh"创建文件夹。步骤
替换默认名称" New_Builder"有意义的名字。对于这个例子:
删除地图文件
在位置编辑框中输入程序名称。
/ bin中/ RM
输入命令所需的参数
$ {project_loc} / $ {CONFIG_NAME:$ {PROJECT_NAME}} / $ {PROJECT_NAME} .MAP
点击刷新标签,然后选择适当的设置。对于这个例子:
启用完成后刷新资源
取消选中递归包含子文件夹
选择特定资源
点击指定资源... 按钮
展开特定项目并在" Debug"旁边放置一个复选标记。和"发布"
按完成按钮。
点击构建选项标签,然后选择适当的设置。对于这个例子:
取消选中分配控制台(输入所需)
仅选中选项"清洁" 运行构建器
>选项
按确定按钮。
答案 1 :(得分:1)
@jędrzej-dudkiewicz
哇!我花了大约一个工作日来解决完全相同的问题,现在我读了你的帖子......
但是我想提出更准确的“问题”解决方案:你需要添加一个带有假目标的新规则,比如superclean
,添加到(例如)makefile.targets
文件中 - 它将被包括在内到主makefile
;然后你需要在项目属性对话框的“C / ++ Build”的“Behavior”页面的“Behavior”页面上添加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
值。虽然只有你不会插入像这样的规则
%.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
答案 2 :(得分:0)
我找到了以下解决方案:在属性,C / C ++ Build,Builder Settings,Builder中有" Build命令"框和"使用默认构建命令"复选框。
所以它非常简单,虽然很脏 - 我已经取代了#34; make"用" customMake" - 它拦截调用,检查"清理"参数并执行我选择的脚本。
很可能有更好的解决方案,但我找不到运气。
还有另一种方式。在项目的根目录中创建文件makefile.targets并创建规则' clean'从Release / Debug / Whatever目录重复makefile执行的步骤,并在那里添加自定义步骤。例如:
清洁: - $(RM)$(OBJS)$(C_DEPS)$(ARCHIVES)libmpos.a echo PLACE CUSTOM STEPS HERE
不幸的是发出关于规则覆盖的警告:
../ makefile.targets:2:警告:覆盖目标clean'
makefile:52: warning: ignoring old commands for target
的命令清理'
但它起作用,似乎比以前的解决方案更好。