Eclipse,CDT,在“干净”步骤中添加自定义步骤

时间:2014-10-29 09:39:25

标签: eclipse makefile eclipse-cdt

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

3 个答案:

答案 0 :(得分:2)

这是一种清洁"一个文件(带有地图文件的具体示例)应该可以正常工作。

要清理多个文件,您可以添加多个“建筑商”' - 每个文件一个。或者,创建一个可以一起清除它们的脚本。

使用"清理" 时管理地图文件的删除:

注意:构建每个目标(通常是Debug和Release)来为" Refresh"创建文件夹。步骤

  • 打开项目的属性
  • 点击建设者
  • 点击新建按钮。
  • 选择程序,然后按OK按钮。
  • 替换默认名称" 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的命令清理'

但它起作用,似乎比以前的解决方案更好。