Eclipse + CDT + Cygwin:如何修复“多个目标”错误?

5

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

更新2: 我发现这个“多目标”错误是由GNU Make 3.8.1版本引起的(参见此处1此处2)。GNU Make 3.8.1是当前与Cygwin一起发布的GNU Make。总结链接:旧版v3.8.0可以正确处理Windows路径,而新版v3.8.1对Windows路径报告错误(也许这是自由软件基金会的一种被动攻击?)。


当您在Eclipse+CDT+Cygwin中启动一个没有外部包含文件/库的新项目时,一切都很好。

一旦我尝试使用外部包含文件/库,我就会遇到“多目标”错误。

以下是在Windows+Eclipse+CDT+Cygwin上复制错误的确切步骤:

  1. 项目属性--> C/C++构建-->设置-->工具设置-->Cygwin C编译器-->包含-->包含路径(-I)-- >添加按钮-->选取目录-->“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语法用于声明一个目标的一部分。当有两个“:”时,Make会出现错误,因为它不知道如何处理“多个目标”。


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

  1. 有没有办法让Eclipse不使用“C:\”路径?或者告诉make忽略“C:\”路径?
  2. 这是Eclipse+CDT+Cygwin的错误吗?
  3. 如果您使用Eclipse+CDT+Cygwin……请帮个忙(我不想使用Visual Studios……)!也许我在使用Eclipse+CDT+cygwin时出错了?您如何使外部库包含功能正常工作?

*非常非常沮丧*

试图保持开源和跨平台用户,

Trevor


[注脚1]这里是我阅读过的一个例子。此链接描述了我遇到的 bug... bug 报告来自 bugs.eclipse.org,年份为 2005 年... https://bugs.eclipse.org/bugs/show_bug.cgi?id=117013。他们的解决方法:编辑 makefile,获取不同的 make 版本等。我不能改变我的 make 版本。而且我也不能手动编辑 makefile,因为它会被自动覆盖。 - Trevor Boyd Smith
[注2] 这是我读到的另一个例子。这个链接描述了我遇到的错误...错误报告来自stackoverflow.com。https://dev59.com/U3E95IYBdhLWcg3wOLU1上述stackoverflow.com链接类似但不重复...因为上面链接中的解决方案对于我来说不可行,他们建议“手动编辑makefile”或者“从网络驱动器运行所有内容”...或者从cygwin shell运行cygwin...这些都是hack而不是解决方案。 - Trevor Boyd Smith
/cygdrive/c/dir1/dir2/ExternalLibrary.h 能用吗?在这里找到了答案:[http://cs.nyu.edu/~yap/prog/cygwin/FAQs.html#windows] - pmg
@pmg 我尝试将包含目录设置为“/cygdrive/c/dir1/dir2”(我还尝试了其他斜杠),以替换“C:\dir1\dir2”。在进行更改后,编译器无法找到.h文件,因此我从编译器中得到了一堆错误,其中包括未知的符号和.h文件的位置。 - Trevor Boyd Smith
看起来你走在正确的道路上,至少你已经找到了问题所在。很抱歉我无法提供更多帮助:我不使用Eclipse或Cygwin。 - pmg
3个回答

3
原来“多个目标”问题是由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为什么会做出这样的事情。在我看来,“如果它没有坏,就不要修理它”。考虑到GNU/FSF反对Windows的立场...也许他们是在被动挑衅? - Trevor Boyd Smith

0

我在更新cygwin后,仍然遇到了eclipse/CDT Juno的同样问题。

解决方法:

您需要安装3.80-1或更早版本的make,并且需要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,例如 make3.82.90

将 cygintl-2.dll 和 make 复制到 cygwin/bin 中

在 Eclipse 中尝试构建您的项目两次,问题应该会消失

Gerdi


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接