代码之家  ›  专栏  ›  技术社区  ›  Paul Lammertsma

非常简单的应用程序在eclipse的“多目标模式”下失败

  •  9
  • Paul Lammertsma  · 技术社区  · 14 年前

    因为我更喜欢使用eclipse,所以我想尝试从visual studio转换我的项目。昨天我试了一个很简单的小测试。不管我怎么努力, make “多目标模式”失败。(这与 this unanswered question )

    我有三个文件:

    应用程序.cpp:

    using namespace std;
    
    #include "Window.h"
    
    int main() {
        Window *win = new Window();
        delete &win;
        return 0;
    }
    

    窗户:H:

    #ifndef WINDOW_H_
    #define WINDOW_H_
    
    class Window {
    public:
        Window();
        ~Window();
    };
    
    #endif
    

    Window.cpp:

    #include <cv.h>
    #include <highgui.h>
    
    #include "Window.h"
    
    const char* WINDOW_NAME = "MyApp";
    
    Window::Window() {
        cvNamedWindow(WINDOW_NAME, CV_WINDOW_AUTOSIZE);
        cvResizeWindow(WINDOW_NAME, 200, 200);
        cvMoveWindow(WINDOW_NAME, 0, 0);
        int key = 0;
        while (true) {
            key = cvWaitKey(0);
            if (key==27 || cvGetWindowHandle(WINDOW_NAME)==0) {
                break;
            }
        }
    }
    Window::~Window() {
        cvDestroyWindow(WINDOW_NAME);
    }
    

    我已将以下路径添加到编译器include path( -I ):

    "$(OPENCV)/cv/include"
    "$(OPENCV)/cxcore/include"
    "$(OPENCV)/otherlibs/highgui"
    

    我已将以下库添加到链接器( -l ):

    cv
    cxcore
    highgui
    

    以及以下库搜索路径( -L ):

    "$(OPENCV)/lib/"
    

    eclipse、编译器和链接器都成功地包含了头和库。我正在使用CGGWN的GNU C/C++编译器和链接器。

    编译时,我得到以下信息 制作 错误:

    src/Window.d:1: *** multiple target patterns. Stop.

    窗口.d包含:

    src/Window.d src/Window.o: ../src/Window.cpp \
      C:/Program\ Files/OpenCV/cv/include/cv.h \
      C:/Program\ Files/OpenCV/cxcore/include/cxcore.h \
      C:/Program\ Files/OpenCV/cxcore/include/cxtypes.h \
      C:/Program\ Files/OpenCV/cxcore/include/cxerror.h \
      C:/Program\ Files/OpenCV/cxcore/include/cvver.h \
      C:/Program\ Files/OpenCV/cxcore/include/cxcore.hpp \
      C:/Program\ Files/OpenCV/cv/include/cvtypes.h \
      C:/Program\ Files/OpenCV/cv/include/cv.hpp \
      C:/Program\ Files/OpenCV/cv/include/cvcompat.h \
      C:/Program\ Files/OpenCV/otherlibs/highgui/highgui.h \
      C:/Program\ Files/OpenCV/cxcore/include/cxcore.h ../src/Constants.h \
      ../src/Window.h
    C:/Program\ Files/OpenCV/cv/include/cv.h:
    C:/Program\ Files/OpenCV/cxcore/include/cxcore.h:
    C:/Program\ Files/OpenCV/cxcore/include/cxtypes.h:
    C:/Program\ Files/OpenCV/cxcore/include/cxerror.h:
    C:/Program\ Files/OpenCV/cxcore/include/cvver.h:
    C:/Program\ Files/OpenCV/cxcore/include/cxcore.hpp:
    C:/Program\ Files/OpenCV/cv/include/cvtypes.h:
    C:/Program\ Files/OpenCV/cv/include/cv.hpp:
    C:/Program\ Files/OpenCV/cv/include/cvcompat.h:
    C:/Program\ Files/OpenCV/otherlibs/highgui/highgui.h:
    C:/Program\ Files/OpenCV/cxcore/include/cxcore.h:
    ../src/Window.h:
    

    我尝试从window.d(从第2行开始)删除所有opencv头文件,但错误仍然存在。另外,我更新了eclipse和opencv,但都没有用。

    你有什么值得尝试的想法吗?我愿意尝试任何事情!

    9 回复  |  直到 14 年前
        1
  •  24
  •   James McNellis    14 年前

    你在cygwin公司工作吗?

    在使用cygwin之前我已经看到这个问题了——基本上, make 看到 : 并认为这是另一个目标定义,因此出现了错误。

    如果您使用的是cygwin安装,则可以尝试替换 c:/ 具有 /cygdrive/c/ . 如果没有,您可以尝试使用相对路径或使用网络装载,看看是否可以修复它。

        2
  •  6
  •   Lesmana    13 年前

    据其他互联网资源称,这与cygwin使用windows路径名,特别是c:时出现的问题有关。 对我来说,设置相对路径很好。

    如果你有

    proj/mymodule/headers/afile.h
    proj/mymodule/source/abc/afile.c
    

    只要添加 ../mymodule/headers/ 作为编译器项目配置中的include path,它将找到头 afile.h 并将生成具有相对路径的make文件。 (编译器命令将具有 -I../mymodule/headers/ )

    看起来执行目录总是项目基目录。

        3
  •  4
  •   Community Michael Schmitz    12 年前

    在cygwin上,gnumakeversion3.81-1由默认的安装程序提供,不能与编译器生成的自动头文件依赖项一起工作。由于此错误,您将看到的错误消息如下所示:

    以下是两个建议的修复方法: -尝试获取以前的版本(3.80) -获取固定的3.81版本,例如 http://www.cmake.org/files/cygwin/make.exe

    SRC: https://projects.coin-or.org/BuildTools/wiki/current-issues

    只需用上面提到的“fixed”make文件替换“c:\ cygwin\bin\”文件夹中的make文件(或安装cygwin的任何地方)。

        4
  •  1
  •   Crow Soup    12 年前

    看来有一个简单的方法来解决这个问题。 只需将“当前生成器”从“GNU生成器”改为“CDT内部生成器”,在项目属性-gt/c++Builder中& GT;工具链编辑器-GT;当前Builder将这样做。

    对我来说,这个问题是由调试目录(或release:)中自动生成的“xxx.d”依赖文件引起的,这些文件是gcc-mf生成的,作为gcc-c的副作用。但是gnu make显然忘记在-mf时在文件名周围添加引号。

    “cdt internal builder”根本不使用makefile或gnu make。eclipse管理构建过程本身。

    如果你坚持使用gnu-make,这是行不通的

        5
  •  1
  •   Thagomizer    11 年前

    在windows/cygwin上使用eclipse时,make还报告了多个目标模式的问题。我只使用相对路径解决了上面建议的问题。我没有意识到我有绝对路径,但是当我使用项目目录指定include目录时,eclipse将其扩展为完整路径。

    例如,如果添加相对于工作区的路径,eclipse将生成“${workspace-loc:/include}”,它将扩展到以“c:\”开头的内容。这就是为什么发生在我的案子里。

    我只是用“../../include”替换了上面的复杂字符串,它解决了我的问题。

        6
  •  0
  •   duckduckgo    11 年前

    也可以删除输出文件夹下的*.d文件,然后生成

    Debug/src/
    
        7
  •  0
  •   tzg    10 年前

    我在Windows环境下工作,在Windows 7上,使用Eclipse的CDT进行C++编程。

    在日蚀中,转到

    Project & & Gt;Projks& Gt;C++Builder -& Gt;设置-&工具设置 标签

    CygWin C++编译器——包括

    在include path(-i)中添加2条路径: “C:\cygwin64\usr\include\libxml2”

    “/cygDrive/c\cygwin64\usr\include\libxml2”

        8
  •  0
  •   Natalie Hedström xelilof    9 年前

    一个对我有效的改变(我将cygwin和ssh终端并行地用于svn服务器)是删除 .d 文件夹。当我打电话给 make -f makefile 从Cygwin那里,它打碎了什么东西。我通常从putty终端编译,删除 D 我项目中的文件它不再抱怨多个目标。

        9
  •  0
  •   FLEMIN JOSE    6 年前

    错误“多目标模式。将出现“stop”,因为src/window.d中的编译器在windows平台中生成的路径为:

    C:/Program\ Files/OpenCV/cv/include/cv.h \ C:/Program\ Files/OpenCV/cxcore/include/cxcore.h \ C:/Program\ Files/OpenCV/cxcore/include/cxtypes.h \ C:/Program\ Files/OpenCV/cxcore/include/cxerror.h \

    如果将此项目导入Linux平台中的Eclipse,我建议您给出一个干净的构建,以便下一个构建以Linux格式生成路径:

    /home/user/OpenCV/cv/include/cv.h \ /home/user/OpenCV/cxcore/include/cxcore.h \ /home/user/OpenCV/cxcore/include/cxtypes.h \ /home/user/OpenCV/cxcore/include/cxerror.h \

    如果您使用的是cygwin,同样适用。cygwin中的路径格式类似于linux /cygdrive/c/ 而不是 C:/