2010-08-06 4 views
2

Je voudrais distribuer un ensemble de variables de construction (que quelqu'un devrait ajouter à leur LDFLAGS), sous une forme qui peut être incluse dans un Makefile et dans un script shell .Définition des variables à utiliser dans les scripts Makefiles et Shell

Ce que j'est maintenant un fichier buildflags.conf:

LDFLAGS_EXTRA="-static -foo -bar" 

Je veux que mes utilisateurs de pouvoir, quand ils utilisent makefiles:

include buildflags.conf 
LDFLAGS+=$LDFLAGS_EXTRA 

Ou, quand ils utilisez un script shell, faire quelque chose comme:

. buildflags.conf 
gcc myapp.o -o myapp $LDFLAGS_EXTRA 

Cela ne fonctionne cependant pas, car a besoin bash citations autour de mon LDFLAGS_E Définition XTRA, alors que make n'en veut pas.

Toute personne ayant une solution pour cela? Je ne souhaite pas gérer plusieurs fichiers buildflags distincts, bien qu'un ensemble de scripts commençant par un seul fichier de définition et pouvant être inclus dans différents contextes conviendrait parfaitement.

Répondre

2

Je dirais que la solution la plus simple est de simplement inclure le script shell contenant les définitions de variables dans vos faire des recettes (cela fonctionne bien si vos recettes sont simples):

target: sources 
    . buildflags.conf ; \ 
    gcc -o [email protected] $^ $$LDFLAGS_EXTRA 

Notez le $ supplémentaire dans la l'utilisation variable et le fait que les deux lignes sont en fait une déclaration, le ;\ est important.

+0

Merci, qui ressemble à une bonne idée. Je soupçonne que la plupart des utilisateurs utiliseront makefiles, donc je préfère avoir le fardeau supplémentaire sur les scripts shell. Existe-t-il un moyen d'avoir exporté ses variables vers un script shell? – Wim

+0

Est-il acceptable d'utiliser un script shell différent qui lit la configuration? Si oui, faites juste quelque chose comme 'eval \' awk -F = '{printf "% s = \"% s \ "\ n", $ 1, $ 2}' Ivo

+0

Parfait! Je l'avais résolu entre-temps en construisant des versions séparées dans mon script de packaging, en utilisant une commande 'awk' similaire à la vôtre. – Wim

1

solution de Ivo dans son commentaire m'a amené à une autre qui fonctionne aussi bien et est plus canonique pour Makefile:

1) Définir LDFLAGS_EXTRA comme dans la question

2) processus Poster la liste pour dans Makefile

LDFLAGS_EXTRA_POST=$(subst ",,${LDFLAGS_EXTRA}) 

3) Assurez-vous de faire référence uniquement LDFLAGS_EXTRA_POST dans Makefile

Questions connexes