【发布时间】:2010-11-15 19:59:15
【问题描述】:
更新 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 提取了一个生成文件。当 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 错了?如何让外部库包含工作?
*非常非常沮丧*
努力保持开源和跨平台用户,
特雷弗
【问题讨论】:
-
[脚注 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