Hi, On 5 Feb 2003, Ralf Corsepius wrote:
und geschweifte Klammern um die Variablennamen?
Oehm, ehrlich gesagt, weiss nicht.
$() .. Makefile-Variablen. ${} .. Shell/Environment-Variablen.
Manche "make"s unterscheiden da sehr streng, andere makes sind da etwas "lässiger" (GNU-make gehört "leider" dazu). Das kann zu "netten" Überraschungen führen, wenn man versucht mit gnu-make geschriebene, vorgeblich portable Makefiles auf anderen U*ixen zu verwenden.
Nein. $(string1) und ${string2} im makefiles sind laut POSIX _exakt_ dasselbe (selbe Auswertungsreihenfolge, selbe Sourcen, alles gleich). Um wirklich auf Shell-Variablen in den commands einer Regel zugreifen zu koennen muss man "$$hallo" schreiben, oder "$${hallo}". Das "$$" wird dann im Command zu "$" und leitet mithin eine ganz normale var-Expansion in shell ein. Womit du es moeglicherweise verwechselst ist, dass die Makros auch aus dem Environment kommen koennen. Also: % cat Makefile all: echo $(HALLO) echo ${HALLO} echo $$HALLO % make -s % make HALLO=huhu -s huhu huhu huhu % HALLO=huhu make -s huhu huhu huhu Aber: % cat Makefile all: for i in 1 2; do echo ${i}; done macht _nicht_ was man will, da 'i' als Makro ja nirgends definiert wird, mithin sind ${i} == $(i) immer leer. Hier will man auf die shell-variable 'i' zugreifen, und sie nicht von make auswerten lassen, also: all: for i in 1 2; do echo $$i; done oder all: for i in 1 2; do echo $${i}; done Ciao, Micha.