【问题标题】:How to get the basename of the current folder as variable in a makefile?如何获取当前文件夹的基本名称作为makefile中的变量?
【发布时间】:2013-03-17 10:39:57
【问题描述】:

我想使用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}

我可能需要通过管道将$(CURDIR) 输入某些内容并找到我的最后一个文件夹。

更新:$(CURDIR) 是正确的变量。 $(CURID) 是错误的,至少它对我不起作用。

【问题讨论】:

标签: makefile directory


【解决方案1】:

我对 makefiles (GNU Make 3.81) 中的反引号语法并不满意,正如 Sylvain 所描述的那样。如果它也不适合您,请使用

$(shell basename $(CURDIR))

而不是

`basename $(CURDIR)`

【讨论】:

  • 这对我有用 :) 但如果我这样做 Folder=$(shell basename $(CURDIR)); echo $Folder 它会打印“旧”。怎么了?
  • $(Folder) 而不是 $Folder。 ;-)
  • 这就是解决方案。
  • 这不适用于包含的 makefile。它将改为报告顶级 makefile 路径。
【解决方案2】:

我试过这条规则:

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

这对我来说很好。

也许这不是为了工作,因为notdir应该

提取每个文件名的非目录部分。

【讨论】:

    【解决方案3】:

    如果您想去掉路径中最后一个文件夹的名称,可以使用许多内置的 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))
    

    这其中的关键当然是$(notdir $(CURDIR))。正如您所发现的,$(CURDIR) 包含运行 makefile 的目录的路径,没有最后的“/”。 notdir 函数会删除文件名中最后一个“/”之前的所有内容。这最终会剥离除最终目录之外的所有内容。

    如果$(CURDIR) 仍然有尾随的“/”,您可以将其去掉,这样notdir 函数就会执行您想要的操作:

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

    请注意,在这种情况下,空格非常重要,在任何逗号之前或之后放置一个空格都会在它进行贪婪模式替换时插入一个空格。

    【讨论】:

    • 如果你有一个像这里这样的变量中有尾随'/'的目录,你也可以使用substitution references将其缩短为$(notdir $(CURDIR:/=))
    【解决方案4】:

    您可以使用basename shell 命令提取$(CURDIR) 的最后一个组成部分。

    copyserver:
       folder=`basename "$(CURDIR)"`; scp Lab2.tar user@server.au:/home/path/${folder}
    

    【讨论】:

    • 这需要在$前面加上{folder}
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多