如何为YoloV3 Darknet(对于Windows)运行“ make”命令?

时间:2019-02-18 14:05:30

标签: windows makefile darknet gnuwin32

运行./make.exe命令(通过使用GNUWin32)后,出现以下错误:

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 个答案:

答案 0 :(得分:0)

这些问题:

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

是由于您要求Make在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生成文件无意创建名为-p的目录,而是在Windows上 这就是它的作用。

尝试修复此特定错误没有任何意义。只是 首先,无限次尝试执行Unix / Linux将导致许多错误 Windows上的makefile。您需要一个可以在其上运行的makefile Windows,或者自己编写,或者找到一种在不使用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编译器引起的 gcc在您的计算机上,或者如果存在,则位于PATH上。所以找不到 它可以执行编译和链接软件的基本业务。

这里是a popular Windows port of GCC

答案 1 :(得分:0)

您的 makefile 是为 Linux 编写的,不能直接移植到 Windows。 问题是“mkdir”与不支持相同命令行选项的 CMD 内置函数冲突(如 Mike Kinghan 所解释)。

一个简单的解决方法是将 makefile 中出现的任何 mkdir 替换为 $(MKDIR) 并在最开始添加:

MKDIR := “$(shell which mkdir)”

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

最后但并非最不重要的一点是,您还需要 gcc,例如,您可以获得 herethere