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

时间:2010-11-15 19:59:15

标签: 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处理窗口路径很好,而较新的v3.8.1报告了Windows路径的错误(也许它是来自FSF的被动攻击性攻击?)。


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

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

以下是在Windows + Eclipse + CDT + Cygwin上重现错误所需的步骤:

  1. 项目项目属性 - > C / C ++ Build - >设置 - >工具设置 - > Cygwin C编译器 - >包括 - >包含路径(-I) - >添加按钮 - >选择目录 - > “C:\ DIR1 \ DIR2”
  2. 我点击了构建。
  3. 第一次构建时没有错误。
  4. 我再次点击构建...我遇到构建错误“多个目标。停止。”。
  5. 我点击错误。
  6. 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语法的一部分。如果有两个“:”,则输出错误,因为它不知道如何处理“多个目标”。


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

    1. Eclipse有没有办法不使用“C:\”路径?或告诉make忽略“C:\”路径?
    2. 这是Eclipse + CDT + Cygwin错误吗?
    3. 如果您使用Eclipse + CDT + Cygwin ......请伸出援助之手(我不想使用Visual Studios ......)!也许我使用Eclipse + CDT + cygwin错了?您如何获得外部图书馆的工作?
    4. *非常非常沮丧*

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

      特雷弗

3 个答案:

答案 0 :(得分:3)

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

GNU Make 3.8.1不处理包含“C:\”的Windows路径。因此,每次make文件的窗口路径为“C:\”时,都会出现构建错误“多个目标”。

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

更新(05-feb-2015): 使用更新的cygwin和新的Make(4.0.x),问题就会消失。 https://superuser.com/questions/154418/where-do-i-get-make-for-cygwin

答案 1 :(得分:0)

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

答案 2 :(得分:0)

更新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 在某处提取它

将你的make在cygwin / bin中重命名为makeVersion,例如make3.82.90

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

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

gerdi