J'ai un GNU Makefile (version 3.81) qui ressemble à ceci:
.PHONY: SPOneDot
SPOneDot:
ifndef X
X=0.05
$$(info X undefined, changed to $X)
endif
ifndef Y
Y=0.05
$$(info Y undefined, changed to $Y)
endif
python ./Submit3DSP.py -f OneDot.qdt -x $(X) -y $(Y)
J'exécute avec la ligne de commande suivante: make X=0.1 Y=0.1 SPOneDot
mais j'obtiens le résultat suivant:
ifndef X
make: ifndef: Command not found
make: *** [SPOneDot] Error 127
J'ai regardé dans la documentation makefile et vu d'autres l'utilisent . Toute aide est appréciée, c'est probablement quelque chose de stupide.
Il est fort probable que vos directives make ne doivent pas être en retrait de tabulation mais commencent dans la première colonne. Je soupçonne également que vous voulez .if(...)
ou similaire, pas simple ifdef
. Il est difficile de dire sans savoir quelle implémentation make
vous utilisez.
Dans GNU make, les parties conditionnelles sont utilisées par exemple comme ceci
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
Le GNU make manual a tous les détails.
Si vous voulez vraiment tester une variable d'environnement (par opposition à une variable make variable ), faites-le simplement dans les commandes:
SPOneDot:
if test -z "$$X"; then X=0.05; echo "X undefined, changed to $$X"; fi; \
if test -z "$$Y"; then Y=0.05; echo "Y undefined, changed to $$Y"; fi; \
python ./Submit3DSP.py -f OneDot.qdt -x $$X -y $$Y
Notez que $$
est transmis au shell sous la forme d'un seul $
et tout doit être une seule commande pour le Shell, d'où les points-virgules et la barre oblique inverse/les nouvelles lignes.
Si la ligne commence par un onglet, elle sera considérée comme faisant partie d'une recette pour une règle. Les espaces supplémentaires sont autorisés et ignorés au début de la ligne de directive conditionnelle, mais aucun onglet n'est autorisé.