2010-10-29 39 views
1

j'avais une définition simple variable dans mon makefile:Comment éviter GNU Make d'exécuter lorsqu'une définition variable a des espaces de fin

THIS   := ~/edan 

et espaces à la fin de la ligne.

Plus tard, quand je définissais une autre variable en termes de celui-ci:

WARES  := $(THIS)/wares 

la variable réelle définie a été /home/directory/edan wares

puis la règle make clean enlevé /home/directory/edan au lieu de ce que je voulais.

Comment puis-je empêcher un makefile de s'exécuter si une ligne a des espaces de fin?

+0

Aïe! Probablement préférable de ne pas supprimer les dossiers en fonction de leurs noms absolus - utilisez un chemin relatif comme 'rm -rf./Wares'. S'il ne s'agit pas d'un sous-répertoire d'où se trouve votre makefile, utilisez: '(cd $ (THIS) && rm -rf ./wares)'. – nobar

Répondre

3

Bien que vous puissiez écrire le Makefile de sorte qu'il vérifie la variable pour les espaces de fin et quitte s'il en trouve, il existe de meilleures façons de gérer cette situation.

Dans ce cas, je recommande d'utiliser la fonction addsuffix pour caténer $(THIS) et /wares au lieu de le faire manuellement. La fonction addsuffix va supprimer les espaces de fin pour vous. En d'autres termes:

WARES := $(addsuffix /wares,$(THIS)) 

Si vous vraiment voulez pour sortir si elle découvre des espaces de fuite, vous pouvez le faire:

THIS := ~/edan 
ifneq "$(THIS)" "$(strip $(THIS))" 
    $(error Found trailing whitespace) 
endif