fr en

Utiliser un tableau dans un Makefile

Posted on 2015-11-12 in Trucs et astuces

J'ai récemment eu besoin de lancer une tâche make pour plusieurs arguments. Je me suis demandé si on pouvait dans le Makefile, en passant une variable en argument sous la forme portals=geojb,n16, répéter une tâche plusieurs fois. Pour cela, il faut réussir à boucler sur l'entrée. Cela se fait comme suit :

.PHONY: toto
toto:
     @echo ${portals}
     IFS=',' && \
     for portal in $${portals}; do \
         echo "$${portal}"; \
         $(call process_portal, $${portal}); \
     done

define process_portal
     echo "processing $1"; \
     echo "done"
endef

Note : on peut tout à fait passer les arguments multiples sous la forme portals="geojb n16". Il faut alors supprimer la ligne IFS=','.

On notera que c'est beaucoup plus facile avec manuel (un petit lanceur de tâche écrit en moins de 150 lignes de bash que j'ai décidé d'utiliser à la place de make) :

#! /usr/bin/env bash

function hello {
    for portal in "$@"; do
        process "${portal}"
    done
}


function _process {
    echo "processing $1"
    echo "done"
}