6
votes

Makefile: dépend de chaque fichier d'un répertoire

J'aimerais faire un makefile qui fonctionne avec gnumake ou maquillage qui contient tous les fichiers sous Directifiories donnés:

./dirA/x
./dirA/y
./dirB/e
./dirB/f


1 commentaires

J'ai essayé:% .npk: $ (wildcard% / *) mais cela ne fonctionne pas. J'ai également pensé à un SEMAFOR mais je suis arrivé au même problème que je devrai dépendre de cible_dir / *.


3 Réponses :


3
votes

Essayez d'utiliser la directive wildcard code>: xxx pré>

EDIT: strong> Ce qui précède n'est qu'un exemple d'utilisation de wildcard code> et rend chaque fichier .npk en fonction des fichiers de tous les autres dossiers. Votre usage serait légèrement différent. P>

Je pense qu'il peut y avoir un moyen plus facile d'y aller. Pourquoi voulez-vous avoir une dépendance à tous les fichiers du dossier? Est-ce juste d'utiliser l'opérateur $ ^ code>? Ou avez-vous besoin de reconstruire le fichier .npk si l'un des fichiers changé? P>

une solution alternative (et éventuellement nettoyante) serait d'utiliser l'utilitaire code> CODE> dans votre recette au lieu de votre recette au lieu de $ ^ code> et utilisez la directive .force code> pour toujours forcer le fichier .npk à reconstruire. L'inconvénient est que les fichiers .npk peuvent être reconstruits inutilement. P>

Edit 2: strong> S'il n'y a pas de moyen de faire cela proprement avec faire des commandes code>, vous pouvez le contourner à l'aide de .force code> pour vous assurer que la recette est toujours exécutée et déplacez-la " reconstruisez ce fichier "Vérifier dans le corps de la recette: p> xxx pré>

check_for_rebuild.sh code> est un script shell qui fait quelque chose comme ceci: P>

#!/bin/bash
# Returns non-zero if the archive needs to be rebuilt
if [ -e $1 ]; then
    folder_name=$(basename $1 .npk)
    [ -z "$(find $folder_name -newer $1 -not -type d)" ] && return 0
fi
return 1


1 commentaires

Exactement, j'ai besoin de reconstruire le fichier NPK si l'un des fichiers modifiés ou un nouveau fichier a été ajouté. .Force n'est pas une option, j'essaie de faire le contraire (actuellement, j'ai un script shell qui recâne tout en x.npk.tmp, puis si cmp x.npk x.npk.tmp Les spectacles ont changé, je renommerai le fichier TMP sinon je le supprime. Mais il est lent que j'ai plus d'in Dirrés et de fichiers.



0
votes

avec maquillage, vous pouvez le faire en 2 étapes, via le modificateur de règles de forach: xxx

Ceci fournit une règle pour chaque sous-répertoire, qui réexécute chaque fois qu'il y a une modification de la liste des fichiers qu'il y a.


0 commentaires

1
votes

C'est la solution que j'ai trouvée: Il est basé sur le MakeDepend idée, avec des scripts "méta". Pas très gentil, mais fonctionne. xxx


1 commentaires

Avec make -j , dépend de la cible peut échouer, ce qu'il fait pour mon cas. Déménagement Makefile.Depend Cible Intérieur Dépend de la recette DOIT réparer.