如何在Windows系统下运行YoloV3 Darknet中的"make"命令?

3
在使用GNUWin32后运行./make.exe命令时,我遇到了以下错误:
mkdir -p obj   
mkdir -p backup   
A subdirectory or file -p already exists.  
Error occurred while processing: -p. make: *** [backup] Error 1

重新运行命令后,我遇到了不同的错误:
mkdir -p results
A subdirectory or file -p already exists.
Error occurred while processing: -p.
make: *** [results] Error 1

不管我重复多少次make命令,我都会得到同样的错误:

gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o
process_begin: CreateProcess(NULL, gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [obj/gemm.o] Error 2

作为一个初学者,您能否提供详细的指导,告诉我如何解决这个问题?
2个回答

3

以下问题:

mkdir -p obj   
mkdir -p backup   
A subdirectory or file -p already exists.  
Error occurred while processing: -p. make: *** [backup] Error 1

由于您要求在Windows上执行一个Linux或其他类Unix操作系统下编写的makefile,因此出现了这些问题。

在类Unix操作系统中,命令如下:

mkdir -p obj

意思是:如果已经存在,创建名为obj的目录并且不会出现错误。在Windows中,它的意思是:创建名为-p的目录,并且再创建一个名为obj的目录。

因此,当mkdir -p obj已经创建了目录-pobj时,命令为:

mkdir -p backup

失败的原因:

A subdirectory or file -p already exists.

Unix/Linux的Makefile并不打算创建名为-p的目录,但在Windows上却是这样。尝试修复此特定错误没有什么意义,因为在Windows上执行Unix/Linux makefile会导致无限多的错误。您需要一个专门为Windows编写的makefile,或自己编写一个,或找到一种不使用Make构建软件的在Windows上构建软件的方法。这是一个问题:
gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o
process_begin: CreateProcess(NULL, gcc -Iinclude/ -Isrc/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -c ./src/gemm.c -o obj/gemm.o, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [obj/gemm.o] Error 2

这是由于您没有在计算机上安装GCC C编译器,或者如果已经安装,则该目录不在您的PATH中。因此,Make无法找到它来执行编译和链接软件的基本操作。

这里是流行的Windows版本GCC


非常感谢您如此详细地解释。 您知道有没有办法在Windows上运行YOLOv3 darknet? - RedGod
@RedGod,我不知道,但在谷歌上搜索“在Windows上安装YOLOv3 darknet”会有结果。 - Mike Kinghan

0

你的makefile已经针对Linux编写,不能直接移植到Windows上。 问题在于'mkdir'与CMD内置函数发生冲突,该函数不支持相同的命令行选项(由Mike Kinghan解释)。

一个简单的解决方案是在你的makefile中用$(MKDIR)替换任何出现的,并在开头添加:

MKDIR := “$(shell which mkdir)

当然,这需要您安装whichCoreUtils(提供mkdir)。请注意使用双引号以避免在路径上出现任何空格问题。

最后但同样重要的是,您还需要gcc,您可以从这里那里获取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接