2013-03-17 5 views
6

Ich möchte eine Datei mit scp auf einen Server kopieren. Aber ich möchte meinen aktuellen Ordnernamen in meinem Makefile als Variable verwenden.Wie erhalte ich den Basisnamen des aktuellen Ordners als Variable in einem Makefile?

Ich weiß, ich bekomme meinen aktuellen Pfad mit $(CURDIR), aber mein lokaler Pfad ist nicht der gleiche auf meinem Remote-Server.

z. Mein Pfad ist /Users/obstschale/Documents/Lab2/ und ich möchte Lab2.tar zu [email protected]:/home/path/Lab2/ kopieren.

copy2server: 
    echo $(CURDIR) 
    scp Lab2.tar [email protected]:/home/path/{folder} 

Ich habe wahrscheinlich Rohr $(CURDIR) in etwas und meinen letzten Ordner.

Update: $(CURDIR) ist die richtige Variable. $(CURID) ist der falsche zumindest funktioniert es nicht für mich.

+0

vollständigen Pfad: http://stackoverflow.com/questions/3050231/how-can-i-capture-the-current-directory-as-an-absolute-pathname-in-a-make-variab –

Antwort

12

Ich hatte kein Glück mit der Backtick-Syntax in Makefiles (GNU Make 3.81), wie Sylvain es beschreibt. Wenn es auch nicht für Sie arbeitet, verwendet

$(shell basename $(CURDIR)) 

statt

`basename $(CURDIR)` 
+0

das funktioniert für mich :) Aber wenn ich 'Folder = $ (shell basename $ (CURDIR)); echo $ Folder' es wird 'älter' gedruckt. Was ist los mit dir? –

+0

$ (Ordner) anstelle von $ Ordner. ;-) – firefrorefiddle

+0

Dies funktionierte für mich, während Sylvains Lösung nicht – nebffa

3

Sie können den Shell-Befehl basename verwenden, um den letzten Komponententeil von $(CURDIR) zu extrahieren.

+0

Dies benötigt ein '$' vor '{folder}'. – destenson

2

Wenn Sie schauen, die letzten Ordnernamen im Pfad strippen, gibt es eine Reihe von integrierten Makefile-Funktionen. Einen schnellen Überblick über Dateioperationen finden Sie unter http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_8.html#SEC74.

copytoserver: 
    scp Lab2.tar [email protected]:/home/path/$(notdir $(CURDIR)) 

Der Schlüssel dazu ist natürlich $(notdir $(CURDIR)). Wie Sie festgestellt haben, enthält die $(CURDIR) den Pfad zu dem Verzeichnis, in dem das Makefile ausgeführt wurde, ohne das abschließende '/'. Die notdir Funktion entfernt alles bis einschließlich dem letzten '/' in einem Dateinamen. Dadurch wird alles außer dem endgültigen Verzeichnis entfernt.

$(notdir $(patsubst %/,%,$(CURDIR))) 

Hinweis, dass der Abstand in diesem Fall von entscheidenden Bedeutung ist, platzieren ein:

Wenn $(CURDIR) noch den Hinter hat ‚/‘, können Sie, dass so die notdir Funktion wird tun, was Sie wollen, wie so abstreifen Leerzeichen vor oder nach einem der Kommas fügt ein Leerzeichen ein, wenn die Greedy-Musterersetzung durchgeführt wird.

2

habe ich versucht, diese Regel:

test: 
    @echo $(CURDIR)   # e.g. /tmp/foobar/blafoor/baz 
    @echo $(notdir $(CURDIR)) # gives "baz" here. 

, die gut für mich gearbeitet.

vielleicht ist dies nicht funktionieren soll, weil notdir sollte

den Nicht-Verzeichnis Teil jeder Namens-Datei extrahieren.

+0

Funktioniert auch für mich :), danke! – smac89

Verwandte Themen