86 votes

Comment sourcer un script dans un Makefile ?

Existe-t-il un meilleur moyen de générer un script, qui définit les variables d'environnement, à partir d'un makefile ?

 FLAG ?= 0
ifeq ($(FLAG),0)
export FLAG=1
/bin/myshell -c '<source scripts here> ; $(MAKE) $@'
else
...targets...
endif

112voto

PureW Points 691

Le shell par défaut du Makefile est /bin/sh qui n'implémente pas source .

Changer le shell en /bin/bash permet :

 # Makefile

SHELL := /bin/bash

rule:
    source env.sh && YourCommand

17voto

Samuel Points 303

En utilisant GNU Make 3.81, je peux sourcer un script shell à partir de make en utilisant :

 rule:
<tab>source source_script.sh && build_files.sh

build_files.sh « obtient » les variables d'environnement exportées par source_script.sh.

Notez qu'en utilisant :

 rule:
<tab>source source_script.sh
<tab>build_files.sh

ne fonctionnera pas. Chaque ligne est exécutée dans son propre sous-shell.

10voto

gdw2 Points 1318

Cela fonctionne pour moi. Remplacez env.sh par le nom du fichier que vous souhaitez sourcer. Cela fonctionne en sourçant le fichier dans bash et en sortant l'environnement modifié, après l'avoir formaté, dans un fichier appelé makeenv qui est ensuite sourcé par le makefile.

 IGNORE := $(shell bash -c "source env.sh; env | sed 's/=/:=/' | sed 's/^/export /' > makeenv")                         
include makeenv   

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