繁体   English   中英

Eclipse,CDT,在“清理”步骤中添加自定义步骤

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM