C++ - 没有创建目标的规则 SaltPepper.o
C++ - no rule to create target SaltPepper.o
我知道有几个这样的问题,到目前为止我找到的答案似乎没有解决我的问题。
我正在使用 eclipse。
我在主函数中编写了一些代码,它运行良好。
然后我使用主代码中的外部函数,现在我得到了有趣的错误。
#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 的标签。
有人可以帮助我吗?
编辑:正如我所说,我正在使用 eclipse,我没有有意创建 makefile。
同样,只要代码在主函数内而不是在 createSaltandPepper() 内,它就可以正常工作。
我的文件叫DisplayImage.cpp,上面的代码在这个文件里,包括函数createSaltandPepper();
此文件中仅有的两个函数是 main 函数和 createSaltandPepper();
项目中没有其他源文件。
如果我觉得我很愚蠢,我很抱歉:我是一名 Java 程序员,对 makefile 等一无所知。
查看此屏幕截图:
我现在创建了一个新项目并将我的旧文件添加到其中,这次称之为 Display.cpp
"build all" 在 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。
现在可以使用了。
首先,此错误与编译器无关,此错误消息是由构建系统产生的(make
在您的情况下)。基本上,eclipse 似乎调用 make
,它找出文件之间的依赖关系以及哪些文件需要重新编译,然后调用编译器来编译它们。然后将每个 C++ 源文件编译为目标文件 .o
(通常具有相同的名称:SaltPepper.cpp
-> SaltPepper.o
)。然后将所有目标文件与库链接在一起以形成最终的可执行文件。
此特定错误消息告诉您您的可执行文件被指定为依赖于目标文件 SaltPepper.o
,但构建系统不知道如何生成它。很可能没有相应的 SaltPepper.cpp
文件。所以检查这样的文件是否存在。如果不是,请检查项目的设置(如果是手动创建的,则检查 Makefile)并查看是否正确指定了所有 cpp 文件名。您应该将所有带有代码的 cpp 文件添加到项目中,并删除所有无关的 cpp 文件。
更新:请注意,构建系统在文件级别运行。它对函数等一无所知,只知道源文件。也许这就是混乱的根源。
我知道有几个这样的问题,到目前为止我找到的答案似乎没有解决我的问题。
我正在使用 eclipse。
我在主函数中编写了一些代码,它运行良好。 然后我使用主代码中的外部函数,现在我得到了有趣的错误。
#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 的标签。
有人可以帮助我吗?
编辑:正如我所说,我正在使用 eclipse,我没有有意创建 makefile。 同样,只要代码在主函数内而不是在 createSaltandPepper() 内,它就可以正常工作。 我的文件叫DisplayImage.cpp,上面的代码在这个文件里,包括函数createSaltandPepper(); 此文件中仅有的两个函数是 main 函数和 createSaltandPepper(); 项目中没有其他源文件。
如果我觉得我很愚蠢,我很抱歉:我是一名 Java 程序员,对 makefile 等一无所知。
查看此屏幕截图:
我现在创建了一个新项目并将我的旧文件添加到其中,这次称之为 Display.cpp
"build all" 在 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。 现在可以使用了。
首先,此错误与编译器无关,此错误消息是由构建系统产生的(make
在您的情况下)。基本上,eclipse 似乎调用 make
,它找出文件之间的依赖关系以及哪些文件需要重新编译,然后调用编译器来编译它们。然后将每个 C++ 源文件编译为目标文件 .o
(通常具有相同的名称:SaltPepper.cpp
-> SaltPepper.o
)。然后将所有目标文件与库链接在一起以形成最终的可执行文件。
此特定错误消息告诉您您的可执行文件被指定为依赖于目标文件 SaltPepper.o
,但构建系统不知道如何生成它。很可能没有相应的 SaltPepper.cpp
文件。所以检查这样的文件是否存在。如果不是,请检查项目的设置(如果是手动创建的,则检查 Makefile)并查看是否正确指定了所有 cpp 文件名。您应该将所有带有代码的 cpp 文件添加到项目中,并删除所有无关的 cpp 文件。
更新:请注意,构建系统在文件级别运行。它对函数等一无所知,只知道源文件。也许这就是混乱的根源。