似乎GNU make解释的basename函数与bash的basename不同.前者剥去后缀,而后者也剥离路径.如何在makefile中获取文件夹的基本名称?
另外,为什么他们改变了呢?(我花了20分钟才找到错误的来源)
我猜想该basename(1)
命令有两个正交的功能——剥离就足够了,剥离主目录部分——并且 GNU 让作者希望能够单独调用每个功能。当然,只有一个概念可以使用basename这个名称。
当然,在 makefile 中,能够将foo/bar/baz.c转换为foo/bar/baz是很有用的,这样您就可以在末尾添加一个新的后缀,以在与源文件相同的目录中构建相关的文件名。
@ire_and_curses 上的评论回答注释$(notdir $(CURDIR))
不足以满足您的目的,因为(作为目录) CURDIR 可能已被指定为
CURDIR = /foo/bar/
Run Code Online (Sandbox Code Playgroud)
notdir
由于尾随斜杠,整个内容被剥离。为了允许这种编写目录路径的方式,您需要使用 例如 显式删除尾部斜杠$(notdir $(CURDIR:%/=%))
。