2017-06-03 108 views
0

我不熟悉如何在Windows Makefile中运行bash命令。在Windows Makefile中复制文件

例如,我想将out.a中的文件target.txt复制到另一个目录out/b(我的当前工作目录不存在)。

我试图

cp /y a\target.txt b 

在我的CMD,和它的作品。

所以我想知道是否在我的Windows makefile中,如何运行该命令?我应该添加一个$符号吗?

回答

1

那么简单的答案实际上不值得回答:只是做它

的情况下有误解:无论你在makefile的食谱线有,或作为参数$(shell),被送入系统的外壳。在windows上,shell是cmd,cmd会理解你的copy命令。


有一个陷阱:像bash壳(我会打电话给他们POSIX壳现在)可用于Windows和。例如,msysmingw的最小构建环境)随bash一起提供。 GNU make在windows上会找到一个posix shell,并且只使用cmd作为后备。

但是,这意味着您的makefile应该准备在cmd和posix shell中运行,以最大程度地兼容用户的系统。这有点棘手,但它可以完成,例如像这样的东西:

ifeq ($(OS),Windows_NT) 

ifneq ($(strip $(filter %sh,$(basename $(realpath $(SHELL))))),) 
POSIXSHELL := 1 
else 
POSIXSHELL := 
endif 

else 
# not on windows: 
POSIXSHELL := 1 

endif 

ifneq ($(POSIXSHELL),) 

CMDSEP := ; 
PSEP :=/
CPF := cp -f 
# more variables for commands you need 

else 

CMDSEP := & 
PSEP := \\ 
CPF := copy /y 
# more variables for commands you need 

endif 

然后,你可以在配方中使用这样一行:

$(CPF) a$(PSEP)target.txt b