在Windows Makefile中复制文件

时间:2017-06-03 01:12:43

标签: windows bash makefile

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

例如我想将out / a中的文件target.txt复制到另一个目录out / b(我当前的工作目录已经出来)。

我试过

 cp /y a\target.txt b

在我的cmd中,它可以正常工作。

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

1 个答案:

答案 0 :(得分:1)

简单的答案实际上并不值得回答:只是这样做

如果存在误解:无论您在makefile的配方行中拥有什么,或者作为int x = ((int)a) - '0'; 的参数,都会被提供给系统的shell。在Windows上,shell为$(shell ),cmd将理解您的cmd命令。

但是有一个陷阱:像copy这样的外壳(我现在称之为 posix shells )也适用于Windows。例如,bashmsys的最小构建环境)附带mingw。 Windows上的GNU make在找到一个posix shell时会更喜欢它,并且只使用bash作为后备。

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

cmd

然后你可以在食谱中使用这样的一行:

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