9
votes

Gnu marque la boucle avec deux variables

Je veux écrire quelque chose dans ces lignes:

$(foreach (var1, var2), ($(LIST1), $(LIST2)), cp $(var1) $(var2);)


1 commentaires

Aussi, comme j'écris cette chose sur la longue façon, j'ai réalisé que j'aurai besoin en dehors d'une règle.


4 Réponses :


3
votes
LIST3 := $(join $(LIST1),$(LIST2))

5 commentaires

Yup parce que je ne veux pas le produit croisé, j'ai besoin d'une cartographie unique. C'est ce qui a mon cerveau en boucle.


Sooooo ... vous avez marqué cette réponse comme correcte. Il ne semble pas répondre à la question que vous avez eue. Est-ce ce que tu voulais ou pas?


Ce n'est pas la réponse que je voulais, mais personne n'a répondu après quelques jours, je l'ai donc marqué comme la réponse correcte la plus relativement correcte. Si vous avez une meilleure réponse, veuillez poster.


@Matthewhoggan, je n'ai pas compris votre commentaire. Vous voulez dire que vous voulez un résultat comme A1 B2 C3 ?


Corrigez-moi si je me trompe si j'ai une liste (A, B, C) et (1, 2, 3) et je gère les scripts ci-dessus, je reçois un, 1 A, 2 A, 3, B, 1, B, 2, B, 3, ... quand je veux un, 1 b, 2 c, 3



10
votes

La suggestion de Beta à utiliser Join est sur la bonne voie, mais le problème est que ce n'est pas si facile de l'utiliser de manière à construire une ligne de commande contenant des espaces blancheurs, tels que celui que vous avez initialement souhaité:

$(subst ^, ,$(join $(addprefix cp^,$(LIST1)),$(patsubst %,^%;,$(LIST2))))


0 commentaires

1
votes

Ceci est un bon candidat pour GSML (GNU effectue une bibliothèque standard). Vous pouvez l'inclure en mettant les fichiers __ gmsl code> et gml ​​ code> dans le répertoire actuel (ou dans / usr / gnu / include code>, / usr / local / include / code>) et l'ajout de la ligne inclure GSML code> dans votre maquillage. Il inclut la fonction paireMap code>, qui fait exactement ce que vous voulez (c'est-à-dire zipwith code>). xxx pré>

sorties p>

$ make 
A : 1 B : 2 C : 3 D : 4
cp A 1; cp B 2; cp C 3; cp D 4;


0 commentaires

0
votes

Un peu ancien mais j'ai trouvé cela vous permet de faire exactement ce dont vous avez besoin. Vous aurez besoin de l'utilitaire SEQ code> qui est un utilitaire UNIX et sera disponible sur Linux et Mac.

J'ai écrit l'exemple avec des variables d'impression, mais cela devrait fonctionner avec la copie. P>

a1 b1

a2 b2

a3 b3

a4 b4


0 commentaires