2010-10-19 7 views
1

J'ai un makefile, definitions.mk, contenant les éléments suivants:Y compris un fichier DEFINE directive dans un makfile

ifneq ($(MY_VARIABLE),true) 
define my-function 
    < some code defining the function) 
endef 
else 
define my-function 
< different code defining the function> 
endef 
endif 

Maintenant, si ma_variable est définie sur false je veux inclure un autre fichier contenant la définition de ma-fonction. Comme:

ifneq ($(MY_VARIABLE),true) 
define my-function 
    < some code defining the function) 
endef 
else 
<include file containing definition of function> 
endif 

Le problème est que je ne peux pas comprendre comment faire cela inclure. Si je vous écris:

include $(BUILD_SYSTEM)/my_function.mk 

je vais faire une erreur en disant:

/bin/bash/: include: command not found 

Alors, comment dois-je aller à ce sujet?

Toute contribution est appréciée!

+0

Quelle version de Make utilisez-vous? – Beta

Répondre

4

En fait, votre deuxième exemple devrait fonctionner correctement. Sur la base de l'erreur que vous voyez bien que je suppose que vous avez tapé le code correctement ici, ce que vous en fait avez dans votre makefile est quelque chose comme ceci:

ifneq ($(MY_VARIABLE),true) 
define my-function 
    thing1 
    thing2 
endef 
else 
define my-function 
    include $(BUILD_SYSTEM)/my_function.mk 
endef 
endif 

C'est, vous avez la directive includeà l'intérieur la directive define. Cela ne fonctionnera pas, à cause de la façon dont fonctionne define. Rappelez-vous, define est juste du sucre syntaxique pour le rendre plus facile de créer des variables avec des valeurs multi-lignes. Cela signifie que, sur le plan conceptuel de toute façon, ceci:

define FOO 
    something 
endef 

est la même que celle-ci:

FOO=something 

Alors effectivement ce que je suppose que vous avez fait est my-function=include my_function.mk. Ensuite, lorsque vous essayez de référencer my-function, il s'étend à include my_function.mk, qui est ensuite transmis à l'interpréteur de commandes, ce qui n'a aucun sens, bien sûr.

Pour être parfaitement clair, voici comment vous pouvez faire ce travail. Tout d'abord, assurez-vous que vous avez le define/endef dans my_function.mk:

define my-function 
    red fish 
    blue fish 
endef 

puis en definitions.mk vous devez avoir ceci:

ifneq ($(MY_VARIABLE),true) 
define my-function 
    thing1 
    thing2 
endef 
else 
    include $(BUILD_SYSTEM)/my_function.mk 
endif 

Notez l'absence du define/endef lignes autour de la ligne include!

+0

Quelle belle explication Eric! Merci beaucoup! J'ai eu le define/endef au mauvais endroit. Merci encore. – Suz