Han*_*lge 11 directory makefile
我想用文件将文件复制到服务器scp.但我想在makefile中使用我当前的文件夹名称作为变量.
我知道我的当前路径使用$(CURDIR)但我的本地路径在我的远程服务器上不一样.
我的路径是/Users/obstschale/Documents/Lab2/,我想将Lab2.tar复制到user@server.au:/home/path/Lab2/.
copy2server:
echo $(CURDIR)
scp Lab2.tar user@server.au:/home/path/{folder}
Run Code Online (Sandbox Code Playgroud)
我可能需要管道$(CURDIR)输入并找到我的最后一个文件夹.
更新:$(CURDIR)是正确的变量.$(CURID)是错误的,至少它不适合我.
fir*_*dle 18
正如Sylvain所描述的那样,我对makefile(GNU Make 3.81)中的反引号语法没有好运.如果它对您不起作用,请使用
$(shell basename $(CURDIR))
Run Code Online (Sandbox Code Playgroud)
代替
`basename $(CURDIR)`
Run Code Online (Sandbox Code Playgroud)
我尝试了以下规则:
test:
@echo $(CURDIR) # e.g. /tmp/foobar/blafoor/baz
@echo $(notdir $(CURDIR)) # gives "baz" here.
Run Code Online (Sandbox Code Playgroud)
对我来说很好
也许这不打算起作用,因为notdir应该
提取每个文件名的非目录部分。
您可以使用basenameshell 命令提取$(CURDIR).
copyserver:
folder=`basename "$(CURDIR)"`; scp Lab2.tar user@server.au:/home/path/${folder}
Run Code Online (Sandbox Code Playgroud)
如果您想去掉路径中的最后一个文件夹名称,有许多内置的 makefile 函数。有关文件操作的快速概述,请参见http://www.chemie.fu-berlin.de/chemnet/use/info/make/make_8.html#SEC74。
copytoserver:
scp Lab2.tar user@server.au:/home/path/$(notdir $(CURDIR))
Run Code Online (Sandbox Code Playgroud)
这当然是关键项目$(notdir $(CURDIR))。正如您所发现的,$(CURDIR)包含运行 makefile 的目录的路径,没有最后的“/”。该notdir函数将删除文件名中的最后一个“/”之前的所有内容。这最终剥离了除最终目录之外的所有内容。
如果$(CURDIR)仍然有尾随的“/”,您可以将其去掉,以便该notdir函数可以执行您想要的操作:
$(notdir $(patsubst %/,%,$(CURDIR)))
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,间距非常重要,在任何逗号之前或之后放置一个空格将在执行贪婪模式替换时插入一个空格。
| 归档时间: |
|
| 查看次数: |
24734 次 |
| 最近记录: |