10
votes

Appeler des commandes Windows (par exemple Suppr) d'un fabricant GNU

Il ne semble pas être possible d'appeler des commandes système Windows (E.G. Del, Déplacer, etc.) à l'aide de GNU. J'essaie de créer un makefile qui ne s'appuie pas sur l'utilisateur ayant des outils supplémentaires (par exemple, rm.exe code> de cygwin) installé.

Lorsque la règle suivante est exécutée, une erreur est signalée. Del: Commande non trouvée CODE>: P>

clean:
    cmd /C del *.o


1 commentaires

quelle version de Windows utilisez-vous?


7 Réponses :


3
votes

del est une commande intégrée de cmd.exe (ainsi que précédemment command.com.com ). Votre commande cmd / c del * .o devrait fonctionner, s'il commence une nouvelle invite de commande, je suppose que cmd peut-être peut-être être une enveloppe. Avez-vous essayé d'appeler CMD avec son chemin complet (E.G. C: /Windows/system32/cmd.exe)?


3 commentaires

Il ne démarre pas une nouvelle fenêtre d'invite de commande, elle imprime la bannière MS Copyright, puis s'arrête. L'utilisation du chemin complet n'a aucun effet.


Essayez de cibler la commande (c'est-à-dire la commande cmd / c "del * .o") - si cela ne fonctionne pas, essayez cmd / k pour voir quelle erreur est (/ k gardera la fenêtre CMD autour de vous le fermer)


Fait intéressant, il fonctionne avec cmd / k del * .o Cependant, il vous laisse dans la nouvelle session et continuera uniquement avec le maquillage lorsque vous tapez Quitter . Citant ne semble pas faire de différence.



13
votes

Il semble que le commutateur / C doit être échappé car un / est interprété comme un chemin dans GNU. Le suivant fonctionne comme prévu: xxx


0 commentaires

0
votes

La réponse de Tom Longridge était proche de la vérité pour moi, mais l'évasion devait être faite à l'aide d'une barre oblique inverse avant la barre oblique de la machine d'affaires de Windows Vista, j'avais besoin de cela pour:

RM=cmd \/C del


0 commentaires

0
votes

Une autre solution consiste à créer un fichier del.bat contenant: xxx

puis le fichier makefile peut simplement contenir XXX

Ceci nettoie le maquillage, mais peut encombrer légèrement votre répertoire de construction.


0 commentaires

5
votes

Parce que les systèmes basés sur DOS ont deux commandes différentes pour supprimer des fichiers et des répertoires, je constate que disposer de deux définitions différentes fonctionne le meilleur: xxx


0 commentaires

5
votes

m'est arrivé aussi. En haut de votre maquillage, ajoutez: xxx

puisque vous compilez sur Windows, sélectionnez "CMD" comme coquille par défaut. Cette est important car GNU FAIT recherchera le chemin d'accès d'une coquille Linux / Unix comme une coque et s'il en trouve un, il l'utilisera à la place. C'est le cas lorsque Cygwin est installé. L'effet secondaire de ce comportement est que les commandes comme «del» et «écho» ne sont pas trouvées. Si nous disons à GNU, il faut utiliser "CMD" comme shell, alors "del" et tel sera disponible.


0 commentaires

0
votes

Je viens de terminer cela. Je ne sais pas si les choses ont changé dans DOS / Windows, mais c'était comme ça qu'il devait être formaté avec les versions actuelles.

OBJ=o
BIN=bin


clean:
    cmd /C del $(OBJ)\\*.o 
    cmd /C del $(BIN)\\*.exe


0 commentaires