0
我不熟悉如何在Windows Makefile中運行bash命令。在Windows Makefile中複製文件
例如,我想將out.a中的文件target.txt複製到另一個目錄out/b(我的當前工作目錄不存在)。
我試圖
cp /y a\target.txt b
在我的CMD,和它的作品。
所以我想知道是否在我的Windows makefile中,如何運行該命令?我應該添加一個$符號嗎?
我不熟悉如何在Windows Makefile中運行bash命令。在Windows Makefile中複製文件
例如,我想將out.a中的文件target.txt複製到另一個目錄out/b(我的當前工作目錄不存在)。
我試圖
cp /y a\target.txt b
在我的CMD,和它的作品。
所以我想知道是否在我的Windows makefile中,如何運行該命令?我應該添加一個$符號嗎?
那麼簡單的答案實際上不值得回答:只是做它。
的情況下有誤解:無論你在makefile的食譜線有,或作爲參數$(shell)
,被送入系統的外殼。在windows上,shell是cmd
,cmd會理解你的copy
命令。
但有一個陷阱:像bash
殼(我會打電話給他們POSIX殼現在)可用於Windows和。例如,msys
(mingw
的最小構建環境)隨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