2011-09-14 4 views
1

Jetez un oeil à la ...Appeler un script shell externe dans un makefile pour les variables de réglage

export CC  = gcc 
export CFLAGS = -W -Wall -fPIC -m32 

USER = $(DB_USER) 
export USER 

PASS = $(DB_PASS) 
export PASS 

SUBDIRS = libs dbserver 

.PHONY: subdirs $(SUBDIRS) 

subdirs: $(SUBDIRS) 

$(SUBDIRS): 
    $(MAKE) -C [email protected] 

makefile suivant (qui ne fonctionne pas) Les variables DB_USER et DB_PASS sont définies dans un fichier externe indépendant , conf.sh, comme ceci:

export DB_USER=<username> 
export DB_PASS=<password> 

Ceux-ci sont alors nécessaires à l'intérieur makefiles SUBDIRS.

Si j'exécute . conf.sh sur la ligne de commande, puis appelez make, alors USER et PASS reçoivent les valeurs correctes, et la compilation est très bien faite. Mais je souhaite appeler conf.sh à l'intérieur du makefile afin que ces variables puissent être définies. Comment puis-je accomplir cela?

Répondre

1

Vous pouvez utiliser:

$(SUBDIRS): 
    . conf.sh; $(MAKE) -C [email protected] DB_USER="$${DB_USER}" DB_PASS="$${DB_PASS}" 

Cela permettra d'exposer le mot de passe sur la ligne de commande, mais fait le travail. Notez les doubles dollars; cette partie est évaluée par le shell, pas par make (donc les accolades sont également nécessaires). Je ne suis pas sûr de le recommander, mais cela devrait fonctionner. En y pensant, vous pourriez probablement éviter de passer explicitement les paramètres puisque le script conf.sh les exporte. Les valeurs de $DB_USER et $DB_PASS seront disponibles à la make subordonnée de toute façon:

$(SUBDIRS): 
    . conf.sh; $(MAKE) -C [email protected] 
+0

Merci beaucoup. Ça marche. :) – Saadat

0

EXPORT définit une variable dans le shell en cours. Les variables ne sont pas visibles dans l'appelant.

Questions connexes