更新 1: 我原来的帖子太长,掩盖了真正的问题。我发现了调用 Make 时导致“多目标”错误的确切原因。
更新 2: 我发现这个“多目标”错误是由 GNU Make 3.8.1 版引起的(参见 here1 和 here2 )。 GNU Make 3.8.1 是当前与 Cygwin 一起发布的 GNU Make。总结链接:旧的 v3.8.0 可以很好地处理 Windows 路径,而较新的 v3.8.1 会报告 Windows 路径的错误(也许这是来自 FSF 的被动攻击?)。
当您在 Eclipse+CDT+Cygwin 中开始一个没有外部包含/库的新项目时,一切对我来说都很好。
一旦我尝试使用外部包含/库,我就会遇到“多目标”错误。
下面是在 Windows+Eclipse+CDT+Cygwin 上重现错误所需的步骤:
- Project 项目属性 --> C/C++ Build --> Settings --> Tool Settings --> Cygwin C Compiler --> Includes --> Include Paths (-I) --> Add Button --> Pick目录 --> "C:\dir1\dir2"
- 我点击构建。
- 第一次构建时没有错误。
- 我再次点击构建...我收到构建错误“多个目标。停止。”。
- 我点击错误。
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。
- 有什么方法可以让 Eclipse 不使用“C:\”路径吗?或者告诉 make 忽略“C:\”路径?
- 这是 Eclipse+CDT+Cygwin 的错误吗?
- 如果您使用 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。参见 Here1或 Here2 .然后 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/