J'ai une règle qui crée un répertoire Cependant, une fois la première fois que le répertoire a été généré, je reçois cette sortie: p> existe une manière que je ne peux exécuter que la règle que si le répertoire n'existe pas, ou supprimez la sortie lorsque le répertoire existe déjà? p> p>
6 Réponses :
L'erreur est déjà ignorée par le meneur ' Vous obtiendrez toujours l'avertissement "ignoré" à partir de - code>' sur la ligne de commande. Si vous voulez vraiment perdre les messages d'erreur de
mkdir code>, utilisez la redirection d'E / S:
. code>, cependant, il pourrait donc être préférable d'utiliser l'option pour
mkdir code> qui ne l'échoue pas lorsque la cible existe déjà, qui est le
-p code > Option: p>
MKDIR_P = mkdir -p
bin:
${MKDIR_P} $@
Pourquoi un tel 2> & 1 code> redirection aident? Je comprendrais
2> / dev / null code> pour envoyer STDERR à Oblivion mais envoyez-le à stdout .....?
@humanityandpeace: vous avez raison - un Thinko de retour en 2010. Je l'ai réparé. Merci.
Votre règle ne doit pas être exécutée que si sa cible n'existe pas ou n'est pas obsolète en raison de ses dépendances. En d'autres termes, vous ne devriez jamais rencontrer cette erreur.
[Exemple ajouté] strong> p> Votre dossier dépend de quelque chose? Votre dossier est-il une cible phony? P> p>
Non. C'est toujours obsolète, ce que vous voyez dans l'op est ce que j'ai.
Eh bien, j'ai fini avec cette construction, peut-être que quelqu'un le trouvera utile ou peut commenter:
BINDIR = . TMPDIR = tmp OUTDIRS = $(BINDIR) $(TMPDIR) $(OUTDIRS): @test -d $@ || mkdir $@
FAIRE EST DO TEST CODE> Pour vous de toute façon, il finit donc à stagner le répertoire deux fois. Cela masque simplement le problème que la cible par défaut est. (DOT).
assume la première cible est la cible par défaut. Si tel est votre maquillage complet, il doit toujours essayer de refaire la cible par défaut, qui est la corbeille. Insérez les lignes suivantes en haut de votre maquillage:
all: bin .PHONY: all
La manière traditionnelle de gérer la création d'annuaire consiste à utiliser un fichier de timbres dépendant de la direction et crée le dir comme un effet secondaire. Supprimer le fichier de timbre lorsque vous apportez La raison de ceci est la suivante: chaque fois qu'un fichier dans distclean code> ou quelle que soit la cible "vraiment propre", c'est le suivant:
BIN CODE> est créé / supprimé, le MTIME du répertoire contenant est mis à jour. Si une cible dépend de
bin code>, alors la prochaine fois
faire code> exécute, il recueille ensuite des fichiers qu'il n'a pas besoin de. P> p>
Le DIRP DEP est-il disponible sur tous les fichiers générés dans cet emplacement?
Chaque fichier créé dans ce répertoire devrait dépendre de manière directe ou indirectement, sur le fichier STAMPLILE pour s'assurer qu'il a été créé avant utilisation.
Une autre façon de supprimer le sans le Ceci fonctionne pour toutes les commandes, pas seulement MKDIR; C'est pourquoi j'ai ajouté cette réponse. P> p> faire: erreur ... (ignorée) code> la sortie est à ajouter
|| vrai code> à une commande qui pourrait échouer. Exemple avec Grep qui vérifie les erreurs dans un fichier journal de latex:
|| vrai code>, se plaint lorsque Grep ne trouve pas toutes les correspondances. P>
Daniel, le caractère de préfixe code> - code> à une commande dans une règle de fabrication fait la même chose sans demander à la coquille de le gérer. Ceci est probablement plus rapide et moins susceptible de se retourner.
Les causes de préfixes code> - code> font la sortie de la sortie gênante "erreur ignorée", que ma solution ne le fait pas. Donc non, les deux ne font pas la même chose.
Cela ne fonctionne que comme ||: (tuyau-pipe-colon) sur ma construction Windows.
Près duplicatin: Stackoverflow.com/Questtions/3477292/...