web-dev-qa-db-fra.com

Erreur Makefile make (e = 2): le système ne trouve pas le fichier spécifié.

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.

12
Colonel Beauvel

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.

10
Etan Reisner

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

6
user3869623

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:

 enter image description here

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:

 enter image description here

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 ???

AJOUTER 1

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:

 enter image description here

5
smwikipedia

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.

4
TobyK

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

1
jgrant

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é.

0
Moustafa Elsayed

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.

0
Ricardo Alejos