Im Makefile existenz eines verzeichnisses testen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
hawkeye78
Beiträge: 430
Registriert: 10.09.2004 17:02:01
Wohnort: castrop-rauxel

Im Makefile existenz eines verzeichnisses testen

Beitrag von hawkeye78 » 10.06.2010 12:47:23

Hallo,

auch wenn diverse Seiten vor guten Vorschlägen überquillen wie man testen kann ob ein Verzeichnis existiert, bin ich entweder zu blöde die Syntax zu verstehen oder die Beispiele sind so allgemein Gehalten das irgendwas wichtiges fehlt (was de facto wieder darauf hinaus läuft das ich zu blöde bin weil mir das wissen fehlt).
Aber um nun auf mein problem zu sprechen zu kommen, ich versuche in einem Make file fest zustellen ob ein Verzeichnis existiert, und habe dabei bis jetzt folgende Varianten ausprobiert.
1. Möglichkeit

Code: Alles auswählen

target:
if test -d "/opt/foo/bar/"; then mkdir "/opt/foo/bar/"; fi
2. Möglichkeit

Code: Alles auswählen

install:
ifeq "$(wildcard "/opt/foo/bar/" )" ""
  -mkdir "/opt/foo/bar/"
endif
3. Möglichkeit

Code: Alles auswählen

install
ifeq (1, $(shell -d "/opt/foo/bar/" ) )
  mkdir "/opt/foo/bar/"
endif
Da ich ja ein bescheidener Mensch bin und mich schon freuen würde wenn einer dieser Möglichkeiten funktionieren würde, würde ich mich sehr darüber freuen wenn mir jemand auf die Sprünge helfen kann und mir sagen kann wie ich nun tatsächlich testen kann ob ein Verzeichnis bereits existiert.
viele Grüsse
Dan
I love deadlines. I like the whooshing sound they make as they fly by - Douglas Adams

Benutzeravatar
Jerry
Beiträge: 665
Registriert: 01.09.2006 08:36:45
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home

Re: Im Makefile existenz eines verzeichnisses testen

Beitrag von Jerry » 10.06.2010 12:58:57

Hallo
mkdir hat den Parameter -p

Code: Alles auswählen

-p, --parents
              Kein Fehler, wenn vorhanden; übergeordnete Verzeichnissen erzeugen, wenn notwendig.
Das sollte in deinem Fall helfen

Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)

ulf
Beiträge: 39
Registriert: 22.09.2002 13:00:52

Re: Im Makefile existenz eines verzeichnisses testen

Beitrag von ulf » 10.06.2010 15:07:57

Was spricht gegen

Code: Alles auswählen

target: /opt/foo/bar p1 p2 p3
[TAB] cmd

/opt/foo/bar:
[TAB] install -d $@
Gruß,
Ulf
Daß Glaube etwas ganz anderes sei als Aberglaube,
ist unter allem Aberglauben der größte.
-- Karlheinz Deschner

hawkeye78
Beiträge: 430
Registriert: 10.09.2004 17:02:01
Wohnort: castrop-rauxel

Re: Im Makefile existenz eines verzeichnisses testen

Beitrag von hawkeye78 » 14.06.2010 11:15:35

Hallo,

ich glaube ich habe mich etwas ungenau ausgedrückt was jetzt dazu führte das es mehr Verwirrung gab als ich eigentlich verursachen wollte. Darum möchte ich mich erst einmal entschuldigen.
Mein ursprünglicher Plan war eigentlich ich prüfe anhand der Existenz des Verzeichnisses ob das programm bereits installiert und falls nicht kopiere ich das Programm (in meinem Fall ein binary) in das neu angelegte Verzeichnis. Daher habe ich mir bis jetzt folgendes makefile zusammen gefragt.

Code: Alles auswählen

install:
        if test -d /opt/ls_dyna/ls971_d_R50 ; then \
        install -D /home/steffen/ls971_d_R5_0_intel64_redhat54 /opt/ls_dyna/ls971_d_R50/ls971_d_R5_0_intel64_redhat54; fi
Wenn ich da jetzt allerdings ein checkinstall make drauf los lasse führt das zu der Meldung

Code: Alles auswählen

Building file list...FAILED
Wenn ich nun allerdings das if (inkl. dem fi) weglassen läuft das checkinstall durch. Daher habe ich nun die Vermutung das das if... noch nicht so ganz sauber ist.
viele Grüsse
Dan
I love deadlines. I like the whooshing sound they make as they fly by - Douglas Adams

ulf
Beiträge: 39
Registriert: 22.09.2002 13:00:52

Re: Im Makefile existenz eines verzeichnisses testen

Beitrag von ulf » 14.06.2010 13:47:16

Na ja, Dein "if test -d" prüft ja, ob das Verzeichnis existiert,
und nicht, ob es nicht existiert:

Code: Alles auswählen

PROGRAM = /home/steffen/ls971_d_R5_0_intel64_redhat54 
INSTALLDIR = /opt/ls_dyna/ls971_d_R50
DEST = $(INSTALLDIR)/ls971_d_R5_0_intel64_redhat54

.PHONY: install
install: $(PROGRAM)
        if test -d $(INSTALLDIR); then \ 
                echo Nothing to do: $(INSTALLDIR) exists.; \                                                
        else \                                                                                            
                install -v -D $(PROGRAM) $(DEST); \                                                   
        fi                                                                                                   
(Hmmpf, wo kommen die Leerzeilen her?)

Du meintest wohl eher

Code: Alles auswählen

if test ! -d ...
Gruß,
Ulf
Daß Glaube etwas ganz anderes sei als Aberglaube,
ist unter allem Aberglauben der größte.
-- Karlheinz Deschner

hawkeye78
Beiträge: 430
Registriert: 10.09.2004 17:02:01
Wohnort: castrop-rauxel

Re: Im Makefile existenz eines verzeichnisses testen

Beitrag von hawkeye78 » 14.06.2010 14:49:16

Hallo ulf,

tat ich tatsächlich und nun funktioniert es auch, vielen Dank für deine Hilfe.
Viele Grüsse
Dan
I love deadlines. I like the whooshing sound they make as they fly by - Douglas Adams

Antworten