J'utilise un fichier makefile dans Windows pour envoyer des fichiers sur un serveur Unix (ici, un fichier texte "blob.txt" dans le même dossier que mon fichier makefile) . Mon script makefile est:
setup:
pscp blob.txt username@hostname:/folder/
Je lance une invite de commande, allez dans le dossier où blob.txt et le fichier makefile sont présents et tapez:
make setup
Ce qui résulte en:
pscp blob.txt username@hostname:/folder/
process_begin: CreateProcess(NULL, pscp blob.txt username@hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [setup] Error 2
Dans un # échec ... alors que si j'entre directement la commande dans l'invite de commande:
pscp blob.txt username@hostname:/folder/
Cela fonctionne ... Je me demande vraiment pourquoi.
L'erreur
process_begin: CreateProcess(NULL, pscp blob.txt username@hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
se plaint presque certainement que Windows ne trouve pas pscp
.
Ceci est presque certainement dû au fait que la valeur de %PATH%
(ou autre) est différente lorsque make génère un shell/une console, puis lorsque vous l'avez ouvert manuellement.
Comparez les valeurs pour le confirmer. Utilisez ensuite le chemin complet de pscp
dans la recette du fichier makefile ou assurez-vous que la valeur de PATH
est définie correctement pour l'utilisation de make
.
Dans mon cas, j'avais git\bin dans mon %PATH%
qui contient bash.exe et sh.exe .. Supprimer %GIT_HOME%\bin
de la PATH
a fonctionné pour moi
La solution de @ user3869623 fonctionne pour moi. J'aimerais partager certains détails pour compléter le tableau.
Mon makefile contient ci-dessous cible:
clean:
@echo '$(OS)'
ifeq ($(OS),Windows_NT)
del /s *.o *.d *.elf *.map *.log
endif
Quand je lance make clean
, je vois cette erreur:
Puisqu'il dit que quelque chose a mal tourné avec echo
, je change donc ma cible de makefile en dessous:
clean:
ifeq ($(OS),Windows_NT)
del /s *.o *.d *.elf *.map *.log
endif
Cette fois, make clean
me donne cette erreur:
Je suis surpris de voir bash
ici puisque je travaille en ligne de commande Windows.
Puis j'ai vérifié mon %PATH%
, je vois cette entrée:
C:\DevTools\Git\bin
Il y a un bash.exe
et un sh.exe
dans ce chemin. J'ai donc supprimé cette entrée et cela fonctionne bien maintenant.
MAIS JE NE SAIS PAS ENCORE QUE POURQUOI BASH PARTICIPE A CELA ???
Pourquoi le C:\DevTools\Git\bin
apparaît-il dans mon %PATH%
, parce que j'utilise Sublime et qu'il me demande toujours les fichiers binaires Git:
Je sais que c’est une vieille question à laquelle on a répondu, mais je pensais que j’avais vécu ce que je ressentais pour tous ceux qui courent encore. Je recevais la même erreur cryptique Colonel Beauvel (bien qu'avec la commande windows MOVE, pas pscp):
process_begin: CreateProcess(NULL, move /y foo\bar.c .\baz.c, ...) failed.
make (e=2): The system cannot find the file specified.
Notre CI fonctionnait sous le même Makefile et fonctionnait parfaitement. Il s'est avéré que CI utilisait mingw32-make et j'utilisais GNU make. La désinstallation de GNU make (qui a été installée dans le cadre d'un paquet en bloc non lié) et l'aliasing mingw32-make pour 'make' fonctionne parfaitement.
Construire sur la réponse de user3869623.
Dans mon cas, j'avais git\bin dans mon% PATH% qui contient bash.exe et sh.exe .. Supprimer de% GIT_HOME%\bin du PATH a fonctionné pour moi
Bien que cette recommandation permette à make
de s'exécuter, cela posera probablement des problèmes à git, notamment si le fichier make installe le logiciel à partir d'un référentiel git.
Une meilleure solution consiste simplement à changer %GIT_HOME%\bin
en %GIT_HOME%\cmd
Pour ceux qui ont essayé de supprimer le dossier git bin de PATH
et que cela n’a pas fonctionné, recherchez dans vos variables PATH
tout chemin contenant bash.exe
.
Dans mon cas, j'ai trouvé une variable liée au dossier cygwin bin C:\cygwin64\bin
, je l'ai supprimée et cela a fonctionné.
Je ne voulais pas supprimer le dossier bin de GIT sous la variable PATH (j'utilise une machine Windows), je l'utilise assez souvent. Alors j'ai cherché un travail autour. Et le voici:
Ajoutez également le répertoire <git-installation-directory>/usr/bin
à votre variable PATH. Cela ajoute essentiellement le reste des commandes de type Linux fournies avec "GIT bash" à votre environnement. Après avoir appliqué cela, mes makefiles ont fonctionné normalement à nouveau. :)
Si vous êtes curieux de savoir quel shell est appelé par make, ajoutez simplement $(info $(Shell))
au début de votre fichier makefile. Le chemin/nom du shell appelé est imprimé sur la console dès que vous exécutez make.