【问题标题】:Possible to get Eclipse CDT to force build of a CMake generated project, disregarding freshness of resources?是否可以让 Eclipse CDT 强制构建 CMake 生成的项目,而不考虑资源的新鲜度?
【发布时间】:2012-04-25 20:56:48
【问题描述】:

我发现自己在使用 Eclipse 时处于一种奇怪的模式。我有一个项目依赖于 Eclipse 项目中未正确考虑的资源,因此如果我只更新依赖项中的标头,Eclipse 拒绝在命令时构建,显然是因为它认为没有必要。结果,我最终不断地在文件中添加一个空格并保存以让 CDT 进行我的竞标。

虽然可以将依赖项集成到项目设置中,但项目偶尔会被 CMake 自动生成工具(我对修补不感兴趣)重写,这会覆盖配置,并要求我重新配置一次又一次的依赖。

我想要做的只是告诉 Eclipse 它应该忽略它认为应该发生的事情并服从构建命令,并让底层的 make 系统完成它的工作(确定应该和应该做什么) t被建造)。

TL;DR:

  • Eclipse CDT 尝试通过观察文件的新鲜度来确定是否构建
  • 它只监视正确设置的依赖项
  • 我不想设置依赖项,因为当我向项目添加文件时,项目经常被 CMake 覆盖

有人知道如何覆盖 CDT 的决定并强制构建吗?

【问题讨论】:

  • 您可以在该项目中使用 Makefile 吗?如果 Eclipse 基于 Makefile 执行构建,您可以在 Makefile 中包含标头,从而强制构建。
  • 它实际上正在使用一个makefile。有问题的标题可以手动包含,但会在下一次自动生成时被覆盖 + 需要手动计算。
  • 好的,我对 automake 不是很熟悉,但显然可以为标题添加依赖项,例如。 G。比如Makefile, header dependencies。因此,您需要的只是对标头的引用,这些标头可能部分由某些 make 规则生成。也许这也可以通过 automake 实现。
  • 您是否尝试过创建 Make Target? Project -> Make Target -> Create ... 然后你可以使用那个目标,它应该做你定义的任何事情。
  • 似乎不起作用;它默默地拒绝添加目标。

标签: c++ eclipse cmake eclipse-cdt


【解决方案1】:

我面临同样的问题,我正在分两部分开发一个程序(两个静态库),如果我对一个库进行重建,Eclipse 不会更新另一个,因为它显然不关注静态库的变化。

解决方案是在每次构建之前“清理”项目(右键单击项目 -> 清理项目),然后进行构建。这有效地删除了所有以前的构建结果并从头开始构建。我还没有弄清楚如何通过单击一个按钮来做到这一点,但这对我有用。

【讨论】:

  • 一个干净的构建对我来说非常昂贵,所以这不是一个选择。
【解决方案2】:

您可以将以下内容添加到您的 makefile 中吗?

FORCE:

%.o : %.cpp FORCE
    $(CXX) -c $(CXXFLAGS) $< -o $@

这里FORCE 是一个空目标,因此总是新鲜的。因此,无论何时 FORCE 包含在依赖项列表中,它们都会在所有构建中重新构建。

【讨论】:

  • 我不能轻易做到这一点,因为我的 Makefile 已委托给 CMake。
【解决方案3】:

您使用的是 Eclipse 的内部构建器吗?因为,在使用外部构建器设置时,我没有遇到您提到的任何问题。即使在 Eclipse 之外编辑某些文件,尽管 Eclipse 完全不知道这些更改,但构建仍然可以工作。

【讨论】:

  • 我正在运行 Indigo sr1,我的属性页面看起来不像,而是:i.imgur.com/GXDep.png 你运行的是什么版本?
  • 我也是。您使用的是什么项目类型? C/C++ 项目? “使用现有代码的 Makefile 项目”?
  • 我导入了一个CMAKE生成的项目。
猜你喜欢
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多