我的makefile中的这个语句有什么问题?
folder:
@mkdir -vp ".cache/vim/"{backup,swap}
我可以在命令行上运行mkdir -vp ".cache/vim/"{backup,swap}
,它完全按照它应该做的,即。创建两个文件夹,备份和交换。
但是当我用上面的代码运行make folder
时,它确实创建了一个文件夹名称{backup,swap}
默认情况下,所有版本的make
都使用/bin/sh
而不是bash
来获取shell命令,而在大多数情况下,bash
是您从命令行使用的交互式shell。这解释了为什么支撑膨胀,bash
中没有的sh
特征,适用于后一种情况但不适用于前者。
如果你想让你的makefile可移植到最高程度,你唯一的选择是完整地编写命令:
folder:
@mkdir -vp '.cache/vim/backup' '.cache/vim/swap'
但是,如果您想使用GNU make
的功能(可用于现有的每个平台,但不一定默认安装),您可以使用addprefix
函数,其方式与此类似:
# Quotes aren’t necessary in this case, this is just to show how to use them
BASEDIR = './cache/vim'
FILES = 'backup' 'swap'
folder:
@mkdir -vp $(addprefix $(BASEDIR)/,$(FILES))
或者您可以指示GNU make
使用/bin/bash
并使用您在命令行上使用的相同命令:
SHELL = /bin/bash
BASEDIR = './cache/vim'
folder:
@mkdir -vp $(BASEDIR)/{backup,swap}
关于GNU make如何使用SHELL
变量的讨论可以在here.找到