【问题标题】:Using Eclipse CDT from command line从命令行使用 Eclipse CDT
【发布时间】:2011-12-26 22:37:50
【问题描述】:

我需要将我的一些 C++ 类、函数和命名空间重命名为我的构建脚本的一部分,该脚本由我的 CI 系统运行。

不幸的是,一个简单的 sad/awk/gsar/... 技术是不够的,我需要智能重命名重构,仔细分析我的代码。

实际上我发现,CDT C/C++ 重命名重构确实是我所需要的。但它是从 Eclipse IDE 中完成的。所以我需要找到一种从命令行启动它的方法,并使其成为我的 CI 构建脚本的一部分。

我知道 Eclipse 有 eclipsec 可执行文件,它允许从命令行运行一些 Eclipse 函数 (see e.g. here)。

但我找不到任何合适的函数文档,CDT 导出到命令行。我发现的唯一东西是this。但这并没有解决我的问题。

所以,我需要帮助才能从命令行(或类似的方式)运行 CDT 重命名重构。如果不可能,可能有人会建议另一个工具,可以从命令行对 C++ 进行重命名重构?

【问题讨论】:

  • 我能问一下为什么您需要在构建过程中执行此操作吗?
  • 为什么要从命令行而不是 IDE 执行所有这些操作?
  • 我需要从命令行来做,因为我什至不想看到这个操作的结果,我只需要把它交给编译器。我不想要实际的代码,我正在努力改变。所以我认为构建脚本是一个合适的地方。

标签: c++ command-line refactoring rename eclipse-cdt


【解决方案1】:

务实的态度

“我需要重命名为我的构建脚本的一部分”

这听起来有点像设计问题。然而,我记得曾经在 AIX/Win32 上编写 C++ 应用程序时犯过同样的罪过:最值得注意的是,我希望能够链接共享对象的“冲突”版本。我使用这样的简单预处理器破解解决了它:

# makefile

#if($(ALTERNATIVE))
    CPPFLAGS+=-DLIBNAMESPACE=MYLIB_ALTERNATIVE
#else
    CPPFLAGS+=-DLIBNAMESPACE=MYLIB
#endif

./obj64/%.o: %cpp
     xlC++ $(CPPFLAGS) $^ -o %@

示例源/头文件:

namespace MYLIB
{
     class LibService :
     {
     };
}

如您所见,这只需要一个

find -iname '*.[hc]pp' -o -iname '*.[hc]' -print0 |
     xargs -0 sed -i 's/OldNamespace/MYLIB/g'

Eclipse 自动化

您可以have a look at eclim,它可以完成您所描述的大部分(如果不是全部),但它针对 vim 编辑器。

eclim 拥有的是来自外部程序的全日食集成(完成、重构、使用搜索等)。我没有完全掌握 eclim 的后端,但我知道它可以与 eclimd 服务器进程一起使用,该进程公开了 vim 插件使用的服务接口。

如果不只是将 eclim 用于您的目的,我怀疑您应该能够重用 eclimd 的代码。

【讨论】:

  • 从我曾经做过的一个项目中添加了一种务实、真实的方法(原文如此):)
  • 哦,是的,当然是设计问题。但在我看来,现在重新设计为时已晚。
  • 非常感谢“务实的方法”。 Ii 提供了一些思考,我认为可以根据我的情况对其进行调整:)
  • 我认为,对我来说,将命名空间'、类'等名称声明为#define 宏以使用预处理器重命名它们就足够了。当然,我应该只在特殊情况下打开该定义。谢谢你,嘿!
【解决方案2】:

我们正在为 C++ 完成一个命令行重命名工具,该工具使用编译器精确解析和名称解析,包括处理隐藏名称。联系我(请参阅简介)了解更多详情,或者如果您可能对测试版感兴趣。

【讨论】:

  • 五年后,我想问一下这个项目是否有成果,是否免费提供
猜你喜欢
  • 2011-01-13
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2014-02-07
相关资源
最近更新 更多