187 votes

Comment s'assurer que la variable Makefile est définie comme une condition préalable ?

Une recette Makefile deploy a besoin d'une variable d'environnement ENV pour être configurée pour s'exécuter correctement, alors que d'autres recettes ne se soucient pas, par exemple,

ENV = 

.PHONY: deploy hello

deploy:
    rsync . $(ENV).example.com:/var/www/myapp/

hello:
    echo "I don't care about ENV, just saying hello!"

Comment puis-je m'assurer que cette variable ENV est définie ? Existe-t-il un moyen de déclarer cette variable makefile comme une condition préalable à la recette de déploiement ? par exemple,

deploy: make-sure-ENV-variable-is-set

136voto

Clayton Stanley Points 2211

Vous pouvez créer une cible de garde implicite, qui vérifie que la variable dans la tige est définie, comme ceci :

guard-%:
    @ if [ "${${*}}" = "" ]; then \
        echo "Environment variable $* not set"; \
        exit 1; \
    fi

Vous ajoutez ensuite une cible guard-ENVVAR où vous voulez affirmer qu'une variable est définie, comme ceci :

change-hostname: guard-HOSTNAME
        ./changeHostname.sh ${HOSTNAME}

Si vous appelez make change-hostname, sans ajouter HOSTNAME=somehostname dans l'appel, alors vous recevrez une erreur, et la compilation échouera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X