GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann die Eval-Funktion im Makefile verwendet werden?

Der einfachste Weg, es zu verstehen, besteht darin, eval durch info:

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

Dadurch wird das Ergebnis der ersten Erweiterung als Ausgabe angezeigt, sodass Sie sehen können, was make tatsächlich analysiert. Sie haben die Werte für die OBJPATH-Variable nicht angegeben, aber wenn es obj war zum Beispiel ergibt dann in Ihrem Fall die erste Erweiterung (der Aufruffunktion):

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

Dann wertet der make-Parser das aus und erweitert es dabei wieder, also Sachen wie $(tmp) erweitert.


Dies war ein Problem für mich, aber ich habe eine nette Problemumgehung gefunden. In meinem Fall hing es mit der AWS-Docker-Anmeldung zusammen. Ich hatte vorher in meinem Shell-Skript:

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

aber wenn man das in Makefile einfügt es hat nicht funktioniert. Die Problemumgehung hierfür besteht darin, die Zeile zu ändern in:

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


Linux
  1. Wie verzögere ich die Variablenerweiterung?

  2. Wie kann ich eine Datei unter Linux symbolisch verknüpfen?

  3. Wie kann ich feststellen, ob ich mich in einem Bildschirm befinde?

  4. So ändern Sie das Standard-/tmp in /home/user/tmp

  5. Wie kann ich ZooKeeper unter Ubuntu stoppen?

Wie kann eine gemeinsam genutzte Bibliothek (.so) eine Funktion aufrufen, die in ihrem Ladeprogramm implementiert ist?

Wie kann ich überprüfen, was Speicherplatz in /tmp beansprucht?

Wie kann ich die Speicherbandbreite beobachten?

Wie kann ich Pip auf Ubuntu 10.04 aktualisieren?

Wie kann ich disk io überwachen?

Wie kann ich die Ausgabe von du -h nach Größe sortieren?