C ++ - 没有规则来创建目标SaltPepper.o

时间:2016-02-16 13:34:09

标签: c++ compiler-errors target

我知道有几个这样的问题,到目前为止我找不到答案似乎解决了我的问题。

我正在使用eclipse。

我在main函数中编写了一些代码,并且工作正常。 然后我在主要代码的外部函数,现在我得到了有趣的错误。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <random>
#include <ctime>
#include <cstdlib>

using namespace std;
using namespace cv;
void  createSaltandPepper();

int main(int argc, char** argv) {

 createSaltandPepper();
 return 0;

}

不,因为我试图不再给出一个广泛的例子,这里是函数的外部:

void  createSaltandPepper() {
//mycode
}

至少它似乎不是拼写错误。

但是,错误是:

make all 
make: *** No rule to make target 'SaltPepper.o', needed by 'Display'. 

如果我的函数名为createSaltandPepper,我确实想知道它为什么要创建一个名为SaltPepper.o的tagert。

有人能帮助我吗?

编辑:我并没有有意识地创建一个makefile,正如我所说我正在使用eclipse。 而且,只要代码在main函数内部而不是在createSaltandPepper()内部,代码就可以正常工作。 我的文件名为DisplayImage.cpp,上面的代码在这个文件中,包括函数createSaltandPepper(); 这个文件中唯一的两个函数是main函数和createSaltandPepper(); 项目中没有其他源文件。

我很抱歉,如果我觉得相当愚蠢:我是一名Java程序员,并且没有关于makefile等的线索。

见此截图:

myeclipse

我现在创建了一个新项目,并将旧文件添加到其中,这次称之为Display.cpp

&#34;建立所有&#34;在subdir.mk中导致错误,该错误显示为:

subdir.mk:18: recipe for target 'Display.o' failed
make: *** [Display.o] Error 1

构建的完整错误消息如下:

make all 
Building file: ../Display.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0-std=c++11 -MMD -MP  -MF"Display.d"     -MT"Display.d" -o"Display.o" "../Display.cpp"
subdir.mk:18: recipe for target 'Display.o' failed
g++: error: argument to ‘-fmessage-length=’ should be a non-negative  integer  
make: *** [Display.o] Error 1

更新

我切换到Netbeans。 它现在有效。

1 个答案:

答案 0 :(得分:2)

首先,此错误与编译器无关,此错误消息由构建系统(在您的情况下为make)生成。基本上,eclipse似乎调用make,它会找出文件之间的依赖关系,以及哪些文件需要重新编译,然后调用编译器来编译它们。然后将每个C ++源文件编译为目标文件.o(通常具有相同的名称:SaltPepper.cpp - &gt; SaltPepper.o)。然后,所有目标文件都与库链接在一起,形成最终的可执行文件。

此特定错误消息告诉您指定可执行文件依赖于目标文件SaltPepper.o,但构建系统不知道如何生成它。很可能没有相应的SaltPepper.cpp文件。所以检查这样的文件是否存在。如果没有,请检查项目的设置(如果手动创建了Makefile,则检查Makefile),看看是否正确指定了所有cpp文件名。您应该将包含代码的所有cpp文件添加到项目中,并删除所有无关的cpp文件。

更新:请注意,构建系统在文件级别上运行。它对功能等一无所知,只知道源文件。也许这就是混乱的根源。