我正在尝试建立一个项目,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/null
makefile 中引用,而是将输出重定向到Windows 上的nul
特殊/dev/null
等效项。