if then im Makefile

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
yonah
Beiträge: 16
Registriert: 29.04.2006 23:18:37

if then im Makefile

Beitrag von yonah » 24.08.2009 14:18:10

Hallo,
ich komme einfach nicht weiter....
Habe ein Makefile, welches Debian und OpenSuse unterscheiden soll.
1. ifeq hab ich jetzt hinbekommen, dass es am Zeilenanfang stehen muss.
2. Er meckert immer irgendetwas an der folgenden if Anweisung. Ich hab schon sämtliche \ ; Kombinationen ausprobiert. Ich weiss
einfach nicht was er will. Meist kommt:
if [ -e "/etc/lsb-release" ];\
then\
../shtool install -c -m 700 init/debian/initscript /etc/init.d/initscript\
else\
../shtool install -c -m 700 init/opensuse/initscript /etc/init.d/initscript\
fi;
/bin/sh: -c: line 6: syntax error: unexpected end of file

ifeq ($(shell uname -s),Linux)
$(SHTOOL) mkdir -f -p -m 755 (sysconfdir)/init.d;
if [ -e "/etc/lsb-release" ];\
then\
$(SHTOOL) install -c -m 700 init/debian/initscript $(sysconfdir)/init.d/initscript\
else\
$(SHTOOL) install -c -m 700 init/opensuse/initscript $(sysconfdir)/init.d/initscript\
fi;
endif


initscript steht für mein Programminitscript

Bitte woran kann es liegen?

gruss yonah

Benutzeravatar
armin
Beiträge: 2682
Registriert: 17.03.2005 11:49:14

Re: if then im Makefile

Beitrag von armin » 24.08.2009 15:26:37

Rücke dein Skript mal mit Tabulatoren ein.
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: if then im Makefile

Beitrag von storm » 24.08.2009 15:59:59

Wie armin schon andeutet, mangelt es dem Skript an der richtigen Einrückung. Falls nur die Foren-Software die geschluckt hat, es gibt für das Schreiben von Quell-Code eigene code-tags:

Code: Alles auswählen

 [code] ... 
[/code]

Dein make-Schnipsel etwas umformatiert funktioniert hier erwartungsgemäß

Code: Alles auswählen

ifeq ($(shell uname -s),Linux)
    $(SHTOOL) mkdir -f -p -m 755 $(sysconfdir)/init.d;
    if [ -e "/etc/lsb-release" ]; then $(SHTOOL) \
      install -c -m 700 init/debian/initscript $(sysconfdir)/init.d/initscript \
    else $(SHTOOL) install -c -m 700 init/opensuse/initscript $(sysconfdir)/init.d/initscript; fi;
endif
In deiner ersten Zeile nach dem ifeq fehlt zudem ein Dollar-Zeichen.

ciao, storm
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

yonah
Beiträge: 16
Registriert: 29.04.2006 23:18:37

Re: if then im Makefile

Beitrag von yonah » 24.08.2009 17:13:58

Danke erstmal für die Hilfe, ich probiere es morgen gleich mal aus.

yonah

yonah
Beiträge: 16
Registriert: 29.04.2006 23:18:37

Re: if then im Makefile

Beitrag von yonah » 25.08.2009 09:59:23

Hallo,

ich hab es jetzt ausprobiert, es kommt zwar keine Fehlermeldung mehr, aber die if then Anweisung wird auch nicht ausgeführt.
Sie erscheint als Quelltext an der Konsole wenn ich make aufrufe. Woran könnte das liegen? Ich hab es auch mit @if probiert, weil ich das irgendwo sah, aber auch das hilft nicht.

gruss yonah

yonah
Beiträge: 16
Registriert: 29.04.2006 23:18:37

Re: if then im Makefile[gelöst]

Beitrag von yonah » 25.08.2009 10:11:08

Dein make-Schnipsel etwas umformatiert funktioniert hier erwartungsgemäß

Code: Alles auswählen

ifeq ($(shell uname -s),Linux)
    $(SHTOOL) mkdir -f -p -m 755 $(sysconfdir)/init.d;
    if [ -e "/etc/lsb-release" ]; then $(SHTOOL) \
      install -c -m 700 init/debian/initscript $(sysconfdir)/init.d/initscript \
    else $(SHTOOL) install -c -m 700 init/opensuse/initscript $(sysconfdir)/init.d/initscript; fi;
endif
[/quote]
So bringt es beim Compilieren keine Fehler, aber es geht nicht. Es fehlt noch ein ;

Code: Alles auswählen

install -c -m 700 init/debian/initscript $(sysconfdir)/init.d/initscript; \
Jetzt geht es, danke.

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: if then im Makefile

Beitrag von storm » 25.08.2009 11:11:04

Es wäre gut zu wissen, für was SHTOOL bei dir steht. Im folgenden Schnipsel hab ich mal "/bin/sh -c" angenommen:

Code: Alles auswählen

ifeq ($(shell uname -s),Linux)
        $(SHTOOL) "mkdir -p -m 755 $(sysconfdir)/init.d"; \
        if [ -e "/etc/lsb-release" ]; then $(SHTOOL) \
        "install -m 700 init/debian/initscript $(sysconfdir)/init.d/initscript"; \
        else $(SHTOOL) "install -m 700 init/opensuse/initscript $(sysconfdir)/init.d/initscript"; fi;
endif
Das funktioniert, nur dass ich die Argumente von "sh -c" quoten musste, weil sonst fehlende operanden von mkdir bzw. install angekreidet wurden.

Der nächste Abschnitt funktioniert ebenso. Beachte das fehlende Fortsetzungszeichen in der zweiten Zeile und die weggefallenen Aufrufe von SHTOOL.

Code: Alles auswählen

ifeq ($(shell uname -s),Linux)
        $(SHTOOL) "mkdir -p -m 755 $(sysconfdir)/init.d";
        if [ -e "/etc/lsb-release" ]; then \
         install -m 700 init/debian/initscript $(sysconfdir)/init.d/initscript; \
        else install -m 700 init/opensuse/initscript $(sysconfdir)/init.d/initscript; fi;
endif
Das @ am Anfang einer Zeile bedeutet nur, dass der darauf folgende Befehl nicht ausgeben wird.
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: if then im Makefile[gelöst]

Beitrag von storm » 25.08.2009 11:13:26

yonah hat geschrieben:Jetzt geht es, danke.
Da war ich etwas spät dran. :)
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

Antworten