2013-03-17 55 views
6

我想使用scp將文件複製到服務器。但是我想在我的makefile中使用我當前的文件夾名稱作爲變量。如何獲取當前文件夾的基名作爲變量在生成文件?

我知道我使用$(CURDIR)獲得當前路徑,但我的遠程服務器上的本地路徑不一樣。

E.g.我的路徑是/Users/obstschale/Documents/Lab2/,我想將Lab2.tar複製到[email protected]:/home/path/Lab2/

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

我可能必須將$(CURDIR)變成東西,找到我的最後一個文件夾。

更新:$(CURDIR)是正確的變量。 $(CURID)是錯誤的,至少它不適合我。

+0

完整路徑:http://stackoverflow.com/questions/3050231/how-can-i-capture-the-current-directory-as-an-absolute-pathname-in-a-make-variab – 2016-08-07 09:19:28

回答

12

Sylvain描述了makefiles(GNU Make 3.81)中的反引號語法,我沒有運氣。如果它不爲你工作,要麼使用

$(shell basename $(CURDIR)) 

代替

`basename $(CURDIR)` 
+0

這對我有用:)但如果我做'Folder = $(shell basename $(CURDIR));回聲$文件夾「它將打印」舊「。怎麼了? – 2013-03-17 11:10:11

+0

$(文件夾)而不是$文件夾。 ;-) – firefrorefiddle 2013-03-17 12:52:29

+0

這對我有用,而Sylvain的解決方案沒有 – nebffa 2013-06-15 12:59:33

3

您可以使用basename shell命令來提取$(CURDIR)的最後一個組成部分。

copyserver: 
    folder=`basename "$(CURDIR)"`; scp Lab2.tar [email protected]:/home/path/${folder} 
+0

這需要'{文件夾}'前面的'$'。 – destenson 2016-07-25 22:26:12

2

如果你正在尋找的路徑出剝去最後一個文件夾的名稱,也有一些在建makefile函數。有關文件操作的快速概述,請參閱http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_8.html#SEC74

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

這個關鍵項目當然是$(notdir $(CURDIR))。正如您發現的那樣,$(CURDIR)包含運行生成文件的目錄的路徑,而不包含最終的「/」。 notdir函數將文件名中的最後一個'/'刪除幷包括在內。這最終會剝離除最終目錄之外的所有內容。

如果$(CURDIR)仍具有尾隨「/」,你可以帶,其關閉,因此該notdir功能會做你想做的,像這樣:

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

注意間距在這種情況下是非常重要的,放置任何逗號之前或之後的空格將在執行貪婪模式替換時插入空格。

2

我想這條規則:

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

這對我來說工作得很好。

也許這是不打算工作,因爲notdir應該

提取每個文件名的非目錄部分。

+0

適用於我:),謝謝! – smac89 2016-09-21 02:27:32

相關問題