Funktionen in Makefile
Ich Schreibe ein Makefile mit einer Menge von sich wiederholenden Themen, wie z.B.
debug_ifort_Linux:
if [ $(UNAME) = Linux ]; then \
$(MAKE) FC=ifort FFLAGS=$(difort) PETSC_FFLAGS="..." \
TARGET=$@ LEXT="ifort_$(UNAME)" -e syst; \
else \
echo $(err_arch); \
exit 1; \
fi
wo ist das target 'syst' definiert ist, wird die variable "UNAME" ist definiert (und ist in der Regel Linux, könnte aber auch von Cygwin oder OSF1) und den Variablen "difort' und 'err_arch' werden auch definiert. Dieser code-block wird sehr viele Male für verschiedene compiler-targets (mit einem Namen-Konvention"'). Da dies eine große Menge an redundanten code, ich möchte in der Lage sein zu schreiben Sie es in einer einfachen Art und Weise. E. g., Ich würde gerne etwas wie das hier tun:
debug_ifort_Linux:
compile(uname,compiler,flags,petsc_flags,target,lext)
wo kompilieren könnte eine Funktion sein tun den obigen code auf der Grundlage der Argumente. Hat jemand eine Idee, wie könnte ich dies erreichen?
InformationsquelleAutor der Frage Karl Yngve Lervåg | 2009-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 3 Verwandte Konzepte:
call
- FunktionDen umgestalteten Ergebnis könnte wie folgt Aussehen:
Dass man
\
bleibt, ist weiterhin die$(MAKE)
Linie für die shell.Nein multi-line-variable, ist hier notwendig, da es nur mit einer Zeile shell-code.
Multi-line-Variablen sind nur in den else-block.
Wenn Sie nicht brauchen Parameter, die Sie verwenden können := Zuweisung und erweitern Sie die Methode mit
$(compile)
(siehe Konserven Rezepte)[Bearbeiten] Hinweis: Verwendung machen Sie vor der version 3.82, die = wurde nicht erkannt, am Ende der define-Anweisung für mich. Ich fixierte diese mit
define compile
statt.InformationsquelleAutor der Antwort JonnyJD
Du suchst die
call
- Funktion.Wenn Sie neu strukturieren kann, Ihr
Makefile
ein bisschen, obwohl Sie sehen sollten, wenn Sie verwenden könnenmake
's Bedingungen stattsh
's.InformationsquelleAutor der Antwort ephemient