2017-06-03 41 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