Itération sur les listes dans les fichiers Makefile?
Je trouve que je suis en train d'écrire beaucoup de Makefiles qui pourraient être nettoyé avec l'utilisation de n-tuple de listes. Mais je ne trouve pas de façon de le faire correctement (et proprement). Jusqu'à présent, j'ai seulement été en mesure de venir avec l'aide $(shell ...) et tr, sed, ou autrement non Makefile normes.
Par exemple, j'aimerais faire ceci:
XYZs = \
dog.c pull_tail bark \
duck.c chase quack \
cow.c tip moo
all:
@- $(foreach X Y Z,$(XYZs), \
$(CC) $X -o bully/$Y ; \
ln bully/$Y sounds/$Z ; \
)
Est-il un bon moyen pour parcourir n-tuple de listes dans les fichiers Makefile? Merci!
OriginalL'auteur Dylan | 2009-06-10
Vous devez vous connecter pour publier un commentaire.
Les Makefiles sont essentiellement déclarative dans la nature, donc je ne pense pas que faire de lui-même fournit ce que vous voulez. Cependant, vous semblez vouloir associer des valeurs de chaîne avec des objectifs précis, peut-être que l' Cible spécifique les valeurs de la variable fonction de GNU make. Ceci est un extrait de la notice:
Si vous ne l'avez pas déjà lu, le GNU make manuel est assez bien fichu.
Edit: De faire ce que vous m'avez demandé dans votre commentaire:
utilisation:
+1, très agréable.
Le problème n'est pas que faire est déclaratif, c'est qu'il ne fournit pas une syntaxe déclarative pour cette fréquemment modèle!
OriginalL'auteur
Je voudrais vérifier le GNU Make manuel sur foreach. voici quelques aléatoire cisailles que j'ai utilisé dans un autre projet... l'exemple est incomplet, mais peut-être que ça vous donnera quelques idées? Je pourrais nettoyer cette plus tard si j'ai plus de temps...
OriginalL'auteur Pete
Merci pour les conseils -- après quelques de piratage je pense que c'est ce que j'espérais:
Quelqu'un peut-il faire mieux?
OriginalL'auteur Dylan
Aucun de ceux que je connais, mais c'est parce que vous essayez de force de faire de travail et un langage impératif, quand ce n'est pas ce qu'il est.
Dans GNU make, vous voudrez probablement faire quelque chose comme:
Ou, mieux encore, de redéfinir la règle par défaut .c fichiers pour gérer les liens pour vous, mais l'étrange structure de vos noms (les noms de programme n'ont pas une relation lexicale à la source des noms) rend difficile.
Si ce que vous voulez être en mesure de reconstruire rapidement sans beaucoup de main d'édition, vous pouvez écrire un script pour régénérer le fichier makefile framgment de données et l'utilisation de la
include
fonction de GNU make...OriginalL'auteur dmckee
Vous êtes en train de faire à l'envers.
Vous êtes à essayer de les traiter comme c'est un script. Ce n'est pas, à la place c'est un ensemble de règles sur la façon de créer X donné Y. Puis le faire moteur chiffres ce qui doit arriver à obtenir ce résultat.
Pour l'exemple donné, vous devez vraiment être à l'aide d'un script pour la génération qui suit. Peut-être l'appel que de faire, mais laisser faire la poignée de la CC des trucs.
OriginalL'auteur caskey
Vous pouvez utiliser des règles par défaut pour un ensemble de fichiers avec la même extension que pour la compilation de chaque
c
fichier à uno
. Bien sûr, vous n'êtes pas limité à aucune des extensions de fichier. Pour la compilation d'un ensemble de.c
fichiers que vous pourriez faire comme ceci:OriginalL'auteur bluebrother