• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Makefile.am und tabstop problem?

}-Tux-{

Hacker
Hi,

kann es sein, dass es beim Makefile.am Probleme gibt wenn man Tabstop's in Conditions verwendent?
Beispiel:

Code:
if OPENPKG
<TAB>kolabrcdir = $(kolab_rcdir)
<TAB>dist_kolabrc_DATA = rc.kolabd
else
<TAB>kolabrcdir = $(sbindir)
<TAB>dist_kolabrc_DATA = dist_conf/rc/kolab
endif

So werden anscheinend die Befehle ignoriert. Wenn ich aber die tab's durch space's ersetze läuft es ohne Probleme:

Code:
if OPENPKG
<space><space>kolabrcdir = $(kolab_rcdir)
<space><space>dist_kolabrc_DATA = rc.kolabd
else
<space><space>kolabrcdir = $(sbindir)
<space><space>dist_kolabrc_DATA = dist_conf/rc/kolab
endif

Hat jemand eine Idee woran das liegen könnte?


mfg }-Tux-{
 
Das ist ganz normale Makefile-Syntax, mit allen damit verbundenen Problemen.

Siehe "info make" => Makefiles => Makefile Contents.

Die Sache ist nicht besonders angenehm (das ist einer der Gründe, weshalb manch einer sagt, dass make "saugt"), aber um es kurz zu sagen: Diese Zeilen, die Du da zitiert hast, sind Variablendeklarationen und da gehören keine Tabs hin.

Tabs haben in Makefiles eine spezielle Bedeutung, sie stehen am Anfang der Zeilen, in denen die von der Shell zum Bau eines Targets auszuführenden Befehle stehen. Das ist bei Variablendeklarationen nicht der Fall, die werden nämlich nicht von der Shell ausgeführt, sondern von make expandiert.

EDIT: http://sources.redhat.com/autobook/autobook/autobook_20.html

Fügt man Tabs auch vor Variablendeklarationen ein, dann denkt make, dass es die Zeilen zum Ausführen an die Shell weiterreichen muss mit der Konsequenz, dass nichts passiert - die Shell führt den Kram sehr wohl aus, da bringt es aber nichts.

Tipp: Lass den Whitespace an der Stelle ganz weg. So sieht man auf den ersten Blick, was was ist bzw. nicht ist.
 
OP
T

}-Tux-{

Hacker
Hi,

danke für deine ausführliche Erklärung.

traffic schrieb:
Tipp: Lass den Whitespace an der Stelle ganz weg. So sieht man auf den ersten Blick, was was ist bzw. nicht ist.
jap werde ich machen.

Thank you.

mfg }-Tux-{
 
Nur mal so als Hinweis. Dieses make-Programm hier ist sehr nützlich beim Auffinden problematischer Stellen in Makefiles:

http://cdrecord.berlios.de/old/private/smake.html

Das ganze Drumherum-Gebashe des Autors gegen GNU-Tools am besten ignorieren, das Tool an sich ist nämlich wirklich gut.

Source-RPM:

http://rapidshare.de/files/10467306/smake-1.2a34-0.src.rpm.html

Der Vorteil daran ist, dass es auch Stellen findet, an denen das normale make Tabs akzeptiert, obwohl sie eigentlich falsch sind, inklusive genauer Angabe der Zeilen- und Spaltennummer etc.
 
OP
T

}-Tux-{

Hacker
traffic schrieb:
Das ganze Drumherum-Gebashe des Autors gegen GNU-Tools am besten ignorieren, das Tool an sich ist nämlich wirklich gut.
hehe - scheint einen sehr eigenwilligen build-mechanismus zu haben :wink:
Aber ansonsten hört es sich ziehmlich vielversprechend an. Danke!

taki schrieb:
Da wir schon mal bei Makefile.am sind, möchte ich noch mal auf die Übersetzung des Makefile.am Howtos hinweisen.
Gruß,
Andreas


http://developer.kde.org/documentation/makefile_am_howto/de/index.html
ist zwar eher kde-spezifisch aber trotzdem danke
(btw. hab 'nen kleinen "bug" in deiner übersetzung gefunden: der "zurück-button" oben links funktioniert nicht vernünftig (Firefox 1.0.6))



}-Tux-{
 

taki

Advanced Hacker
}-Tux-{ schrieb:
ist zwar eher kde-spezifisch aber trotzdem danke
(btw. hab 'nen kleinen "bug" in deiner übersetzung gefunden: der "zurück-button" oben links funktioniert nicht vernünftig (Firefox 1.0.6))

Im Konqueror funktioniert der "Zurück"-Link einwandfrei.

In Mozilla funktioniert komischer Weise nur der Unterstrich unter dem "Zurück".

Schätze, das liegt am Umlaut. Die HTML-Seiten sind aus einer Docbook-XML-Source generiert worden. Die Navigationsleisten kommen aus den Vorlagen der KDE-Dokumentation.
 
}-Tux-{ schrieb:
hehe - scheint einen sehr eigenwilligen build-mechanismus zu haben :wink:
Das liegt daran, dass es sich selbst zum Bauen braucht. ;) Deswegen kompiliert es erst eine abgespeckte Version von sich selbst mit einem Shell-Skript und anschließend sich selbst mit der abgespeckten Version.

Danach kann man bei automake-basierten Projekten ganz normal "./configure" ausführen und dann eben "smake" statt "make" - bei "sauberen" Makefiles geht alles glatt, bei anderen bekommt man aufschlussreiche Fehlermeldungen.
 
Oben