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