Windows 上的 Make 似乎无法创建或运行临时 shell

Windows 上的 Make 似乎无法创建或运行临时 shell

我正在尝试建立一个项目,LUFA 提供的 AVR 设备引导加载程序,使用 GNU Make ( make),但我使用的是 Windows。虽然 Windows 本身不一定是问题所在,但它显然会给事情带来麻烦。

我通过 Chocolatey 安装了make其他辅助程序(grep、mingw 等)。我有时也会在它们上面安装 Cygwin/MinGW,但我认为我没有使用这些二进制文件……但也许它们没有帮助……

我正在运行make,甚至在执行第一个 make 目标之前就收到错误:

#...

test:
  echo test

#...

结果:

C:\Users\camer\git\Project\bootloader>make
The system cannot find the path specified.
The system cannot find the path specified.
The system cannot find the path specified.
echo test
test

make -d似乎显示了导致The system cannot find the path specified.错误的原因:

PS C:\Users\camer\git\Project\bootloader> make -d
GNU Make 4.3
Built for Windows32
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile 'Makefile'...
CreateProcess(C:\WINDOWS\system32\hostname.exe,hostname,...)
Main thread handle = 00000110
Reading makefile 'local.HOSTNAME.mk' (search path) (don't care) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/LUFA/lufa-sources.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/LUFA/lufa-gcc.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/core.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/cppcheck.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/core.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/doxygen.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/core.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/dfu.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/core.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/gcc.mk' (search path) (no ~ expansion)...
Reading makefile 'LUFA/LUFA/Build/DMBS/DMBS/core.mk' (search path) (no ~ expansion)...
Creating temporary batch file C:\Users\camer\AppData\Local\Temp\make14552-1.bat
Batch file contents:
        @echo off
        mkdir -p obj 2> /dev/null
CreateProcess(C:\Users\camer\AppData\Local\Temp\make14552-1.bat,C:\Users\camer\AppData\Local\Temp\make14552-1.bat,...)
The system cannot find the path specified.
Cleaning up temporary batch file C:\Users\camer\AppData\Local\Temp\make14552-1.bat
...

因此,它似乎make正在尝试在 Windows 上采用某种变通方法,即创建一个临时批处理 ( .bat) 文件并执行该文件以获取一些输出。或者也许这是标准做法,它会.sh在 Linux 上创建一个脚本... 无论如何,这似乎是出于某种原因而失败的原因。

查看 LUFA 包含的 Makefile(LUFA/LUFA/Build/DMBS/DMBS/*.mk),我可以看到正在尝试运行的指令:

#...
# Create the output object file directory if it does not exist and add it to the virtual path list
$(shell mkdir -p $(OBJDIR) 2> /dev/null)
#...

因此,Make 的内置功能shell在 Windows 10 上出现了故障。

奇怪的是,这些错误不要使构建失败。您可以在我的示例中看到它echo test仍在运行。

事实证明,这会导致 LUFA 的 Makefile 出现一系列其他问题。shell内置函数用于填充许多 make 变量,并且许多构建步骤都要求这些变量不为空。由于调用shell失败而没有停止整个执行,因此一切都会中断。

我不太确定下一步该去哪里解决我的问题。是不是因为我用的版本不好make?我试过make.exe不同地方的几个二进制文件,它们都有这个错误(如果我没记错的话)。我很确定这些 make 文件在之前的 Windows 安装中可以正常工作,但那台电脑现在处于离线状态,所以我无法比较。

谢谢你的关注!干杯!

答案1

好吧,事实证明问题不在于创建新的 shell。shell 的创建与预期一致。问题在于输出重定向/dev/null,这在 Windows 上没有意义。

这里的中间解决方案是不在/dev/nullmakefile 中引用,而是将输出重定向到Windows 上的nul特殊/dev/null等效项。

相关内容