非常简单的应用程序因Eclipse中的"多目标模式"而失败

Pau*_*sma 10 c++ eclipse gcc cygwin makefile

由于我更习惯使用Eclipse,我想我会尝试从Visual Studio转换我的项目.昨天我尝试了一个非常简单的小测试.无论我尝试什么,都make失败了"多目标模式".(这类似于这个悬而未决的问题.)

我有三个文件:

Application.cpp:

using namespace std;

#include "Window.h"

int main() {
    Window *win = new Window();
    delete &win;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在window.h:

#ifndef WINDOW_H_
#define WINDOW_H_

class Window {
public:
    Window();
    ~Window();
};

#endif
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

我在编译器中添加了以下路径包括path(-I):

"$(OPENCV)/cv/include"
"$(OPENCV)/cxcore/include"
"$(OPENCV)/otherlibs/highgui"
Run Code Online (Sandbox Code Playgroud)

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

cv
cxcore
highgui
Run Code Online (Sandbox Code Playgroud)

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

"$(OPENCV)/lib/"
Run Code Online (Sandbox Code Playgroud)

Eclipse,编译器和链接器都成功地包含了头文件和库.我正在使用Cygwin的GNU C/C++编译器和链接器.

编译时,我收到以下make错误:

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

Window.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:
Run Code Online (Sandbox Code Playgroud)

我尝试从Window.d(从第2行开始)删除所有OpenCV标头,但错误仍然存​​在.此外,我已经更新了Eclipse和OpenCV,但都无济于事.

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

Jam*_*lis 26

你在Cygwin安装工作吗?

我在使用Cygwin之前已经看到过这个问题 - 基本上,在路径中make看到:并认为它是另一个目标定义,因此错误.

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

  • 当我之前遇到这个问题时,我们通过简单地将所有`c:/`替换为`/ cygdrive/c`(包括它所引入的环境变量)来解决它,这解决了我们的问题.我不认为你可以在GNU make中使用`c:/`格式路径(虽然可能有一些特定于Windows的构建;我不能与Cygwin一起工作,足以知道).网络安装可能仍然有效 - 将`c:`映射为`c`,然后您可以从`\\ mycomputer\c`访问它.除此之外,我没有想法:(. (3认同)

小智 6

根据其他互联网资料,这与cygwin制作的与windows路径名称有关的问题有关,特别是c:.对我来说,它可以设置相对路径.

例如,如果你有类似的东西

proj/mymodule/headers/afile.h
proj/mymodule/source/abc/afile.c
Run Code Online (Sandbox Code Playgroud)

只需../mymodule/headers/ 在编译器的项目配置中添加包含路径,这将找到标题afile.h并生成具有相对路径的make文件.(编译器命令会有语句-I../mymodule/headers/)

看起来像执行目录始终是项目基目录.