【问题标题】:Eclipse + CDT + Cygwin: How do you fix the "Multiple targets" bug?Eclipse + CDT + Cygwin:如何修复“多目标”错误?
【发布时间】:2010-11-15 19:59:15
【问题描述】:

更新 1: 我原来的帖子太长了,掩盖了真正的问题。我已经发现了调用 Make 时导致“多个目标”错误的确切原因。

更新 2: 我发现这个“多目标”错误是由 GNU Make 版本 3.8.1 引起的(参见 here1here2)。 GNU Make 3.8.1 是当前随 Cygwin 发布的 GNU Make。总结一下链接:旧的 v3.8.0 可以很好地处理 windows 路径,而较新的 v3.8.1 会报告 windows 路径的错误(可能是 FSF 的被动攻击?)。


当您在没有外部包含/库的 Eclipse+CDT+Cygwin 中启动一个新项目时,对我来说一切正常。

一旦我尝试使用外部包含/库,就会出现“多个目标”错误。

这正是在 Windows+Eclipse+CDT+Cygwin 上重现该错误所需的步骤:

  1. Project 项目属性 --> C/C++ Build --> Settings --> Tool Settings --> Cygwin C Compiler --> Includes --> Include Paths (-I) --> Add Button --> Pick目录 --> "C:\dir1\dir2"
  2. 我点击了构建。
  3. 第一次构建没有错误。
  4. 我再次点击构建...我收到构建错误“多个目标。停止。”。
  5. 我点击了错误。

Eclipse 提取了一个生成文件。当 make 从外部库中看到新包含文件的 windows 路径时会发生错误:

# NOTE: Error happens when the first "C:/" occurs
src/main.d src/main.o: ../src/main.c C:/dir1/dir2/ExternalLibrary.h

Make 收到错误“多个目标”的原因是因为它看到了“:”,这是用于声明目标的 Make 语法的一部分。当有两个“:”时,会出错,因为它不知道如何处理“多个目标”。


我无法手动编辑 makefile,因为它们会立即重新生成并覆盖 [更新:由 Eclipse-CDT]。鉴于我无法手动编辑 makefile。

  1. Eclipse 有什么方法可以不使用“C:\”路径?还是告诉 make 忽略“C:\”路径?
  2. 这是 Eclipse+CDT+Cygwin 的错误吗?
  3. 如果您使用 Eclipse+CDT+Cygwin...请帮忙(我不想使用 Visual Studios...)!也许我使用 Eclipse+CDT+cygwin 错了?如何让外部库包含工作?

*非常非常沮丧*

努力保持开源和跨平台用户,

特雷弗

【问题讨论】:

  • [脚注 1] 这是我读过的一个例子。此链接描述了我遇到的错误...错误报告来自 bugs.eclipse.org 和 2005 年...bugs.eclipse.org/bugs/show_bug.cgi?id=117013。他们的解决方案:编辑makefile,获得不同的make 版本,等等。我不能改变我的make 版本。而且我不能手动编辑makefile,因为它会被自动覆盖。
  • [脚注 2] 这是我读到的另一个例子。此链接描述了我遇到的错误...错误报告来自 stackoverflow.com。 @ 987654324@ 上面的stackoverflow.com 链接是相似的,但不是重复的......因为上面链接中的解决方案对“手动编辑makefile”的解决方案很满意,而这对我来说不是一个选项。 (他们还建议“从网络驱动器运行所有内容”......或从 cygwin shell 运行 cygwin......这些是黑客而不是 IMO 解决方案。)
  • /cygdrive/c/dir1/dir2/ExternalLibrary.h 有效吗?发现here
  • @pmg 我确实尝试将包含目录从“C:\dir1\dir2”设置为“/cygdrive/c/dir1/dir2”(我也尝试了其他斜杠)。进行更改后,编译器看不到 .h 文件。所以我从编译器那里得到一堆错误,不知道 .h 文件在哪里和“未定义”符号。
  • 看起来你在正确的道路上,至少你发现了问题。抱歉,我帮不上忙:我不使用 Eclipse 或 Cygwin。

标签: c eclipse makefile cygwin eclipse-cdt


【解决方案1】:

原来“多目标”问题是由从 Cygwin 安装的当前版本的 GNU Make 引起的。 GNU Make 3.8.1 是当前随 Cygwin 发布的 GNU Make。

GNU Make 3.8.1 不处理包含“C:\”的 Windows 路径。所以每次你的make文件有一个带有“C:\”的windows路径时,你都会得到一个构建错误“多个目标”。

我最终做的解决方案是下载一个固定的 GNU Make v3.8.1。请参阅Here1Here2。然后 Eclipse+CDT+Cygwin 又可以正常工作了。

更新(2015 年 2 月 5 日): 使用更新的 cygwin 和新的 Make (4.0.x),问题就消失了。 https://superuser.com/questions/154418/where-do-i-get-make-for-cygwin

【讨论】:

  • 不知道为什么 GNU 会破坏做这样的事情。 IMO“如果它没有坏,就不要修理它”。了解 GNU/FSF 对 Windows 的立场......也许他们是被动攻击?
【解决方案2】:

也遇到过这样的问题。问题是我在项目设置中包含了路径。然后我有绝对路径。当在文件夹设置中包含具有相对路径的路径时,它工作正常。

【讨论】:

    【解决方案3】:

    更新 cygwin 后,我仍然遇到与 eclipse/CDT Juno 相同的问题

    修复它:

    您需要制作 3.80-1 或更高版本,这需要 cygintl-2.dll。 从下载 make3.80-1

    http://www.filewatcher.com/m/make-3.80-1.tar.bz2.286814-0.html

    以及所需的 Dll 来自

    http://www.dllguru.com/cygintl-2.dll.html 在某处提取它

    在 cygwin/bin 中将你的 make 重命名为 makeVersion 例如制作3.82.90

    复制cygintl-2.dll并制作成cygwin/bin

    尝试在eclipse中构建你的项目两次,问题应该消失了

    格迪

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-14
      • 2013-09-11
      • 2017-08-06
      • 2011-01-21
      • 2011-02-10
      • 2018-03-23
      • 2011-12-22
      • 2014-12-09
      相关资源
      最近更新 更多