GNU/Linux >> Tutoriels Linux >  >> Linux

Comment la fonction eval peut-elle être utilisée dans le makefile ?

La façon la plus simple de le comprendre est de remplacer eval par info :

$(info $(call func, foo, 1.c))

Cela affichera en sortie le résultat de la première expansion, afin que vous puissiez voir ce que make sera réellement analysé. Vous n'avez pas fourni les valeurs de la variable OBJPATH, mais si c'était obj par exemple, dans votre cas, la première expansion (de la fonction d'appel) donne :

tmp = obj/foo
objs += $(tmp)
$(tmp) : 1.c
    gcc $^ -o [email protected]

Ensuite, l'analyseur make évaluera cela, et dans le processus, il le développera à nouveau, donc des choses comme $(tmp) sont développés.


Cela a été un problème pour moi, mais j'ai trouvé une bonne solution de contournement. Dans mon cas, cela était lié à la connexion au docker AWS. J'avais précédemment dans mon script shell :

eval $(aws ecr get-login --region eu-west-1 --no-include-email --profile someprofile)

mais en mettant cela dans Makefile ça n'a pas marché. La solution de contournement consiste à modifier la ligne en :

$$(aws ecr get-login --region eu-west-1 --no-include-email --profile someprofile)


Linux
  1. Comment différer l'expansion variable ?

  2. Comment strace doit-il être utilisé?

  3. Comment puis-je savoir si je suis dans un écran ?

  4. Comment puis-je exécuter une fonction à partir d'un script en ligne de commande ?

  5. C++11 :Comment aliaser une fonction ?

Comment puis-je lier symboliquement un fichier sous Linux?

Comment puis-je obtenir ce que ma fonction principale a renvoyé?

Comment puis-je vérifier ce qui prend de l'espace disque dans /tmp ?

Comment puis-je mettre à jour pip sur Ubuntu 10.04 ?

Comment changer /tmp par défaut en /home/user/tmp

Comment puis-je arrêter ZooKeeper sur Ubuntu ?