c - eclipse + CDT + Cygwin : How do you fix the "Multiple targets" bug?

标签 c eclipse makefile cygwin eclipse-cdt

更新 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 会生成一个 makefile。当 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?您如何让外部库包含工作?

*非常非常沮丧*

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

特雷弗

最佳答案

事实证明,“多目标”问题是由从 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

关于c - eclipse + CDT + Cygwin : How do you fix the "Multiple targets" bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188285/

相关文章:

eclipse - 如何在 Eclipse 中显示 gdb 跟踪?

android - 使用 sudo 启动 eclipse 时,avd 存储在错误的文件夹中

java - 如何设置JDK版本来编译JSP页面?

android - NDK r10b 和 c++11 特性

在 Linux 中使用 makefile 编译内核模块

c - 如何获取UTF-8字符的值

c - C文件中的extern void指针

makefile - 这个 Makefile 语句中的两个百分号 % 符号是什么意思?

c - 为什么循环裂变在这种情况下有意义?

c++ - 与 gcc 和 g++ 的链接有什么区别?