Estou tentando construir um projeto, bootloader para dispositivos AVR fornecidos pela LUFA , que usa GNU Make ( make
), mas estou no Windows. Embora o Windows, por si só, não seja necessariamente o problema, está claramente atrapalhando as coisas.
Instalei make
e outros programas auxiliares (grep, mingw, ...) via Chocolatey. Eu também instalei o Cygwin/MinGW neles às vezes, mas acredito que não estou usando esses binários ... mas talvez eles não estejam ajudando ...
Estou executando make
e recebo um erro antes mesmo que o primeiro alvo make seja executado:
#...
test:
echo test
#...
Resultado:
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
parece mostrar o que está causando os The system cannot find the path specified.
erros:
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
...
Portanto, parece que make
está tentando alguma solução alternativa no Windows que cria um arquivo de lote temporário ( .bat
) e o executa para obter alguma saída. Ou talvez seja uma prática padrão e crie um .sh
script no Linux... De qualquer forma, parece ser isso que está falhando por algum motivo.
Olhando para os Makefiles ( ), incluídos no LUFA LUFA/LUFA/Build/DMBS/DMBS/*.mk
, posso ver as instruções que estão tentando ser executadas:
#...
# 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)
#...
Então, algo sobre o built-in do Make shell
está falhando no Windows 10.
Curiosamente, esses erros não fazem a compilação falhar. Você pode ver no meu exemplo que echo test
ainda é executado.
Acontece que isso está causando uma série de outros problemas com os Makefiles do LUFA. O shell
builtin é usado para preencher muitos make vars e muitas etapas de compilação esperam que essas variáveis não sejam vazias. Como a shell
chamada falha sem derrubar toda a execução, tudo quebra.
Não tenho certeza de onde procurar para resolver meu problema. Será que estou usando uma versão ruim do make
? Eu tentei alguns make.exe
binários de lugares diferentes e todos eles têm esse erro (se a memória servir). Tenho certeza de que esses arquivos make funcionam em uma instalação anterior do Windows, mas esse computador agora está offline, então não posso comparar.
Obrigado pelo olhar! Felicidades!
Bem, acontece que o problema não foi criar novos shells. Os shells estavam sendo criados conforme o esperado. O problema foi a saída redirecionar o
/dev/null
, o que não faz sentido no Windows.A solução intermediária aqui é não fazer referência
/dev/null
no makefile, mas redirecionar a saída paranul
, o/dev/null
equivalente especial no Windows.