我正在尝试构建一个项目,即LUFA 提供的 AVR 设备的引导加载程序,它使用 GNU Make ( make
),但我在 Windows 上。虽然 Windows 本身并不一定是问题所在,但它显然是个麻烦事。
我已经make
通过 Chocolatey 安装了其他辅助程序(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 包含的 Makefiles ( 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 出现一系列其他问题。内置函数用于填充许多 make var ,shell
并且许多构建步骤期望这些变量为非空。由于shell
调用失败而没有取消整个执行,所以一切都中断了。
我不太确定下一步该去哪里解决我的问题。是不是我使用的版本不好make
?我尝试了一些make.exe
来自不同地方的二进制文件,它们都有这个错误(如果有记忆的话)。我很确定我已经让这些 make 文件在以前的 Windows 安装中运行,但是那台计算机现在处于脱机状态,所以我无法比较。
谢谢你的目光!干杯!
好吧,事实证明问题不在于创建新的外壳。贝壳正在按预期创建。问题是输出重定向
/dev/null
,这在 Windows 上没有意义。这里的中间解决方案是不在
/dev/null
makefile 中引用,而是将输出重定向到Windows 上nul
的特殊/dev/null
等效项。