我不熟悉如何在Windows Makefile中运行bash命令。
例如我想将out / a中的文件target.txt复制到另一个目录out / b(我当前的工作目录已经出来)。
我试过
cp /y a\target.txt b
在我的cmd中,它可以正常工作。
所以我想知道在我的Windows makefile中,我该如何运行该命令?我应该加一个$符号吗?
答案 0 :(得分:1)
简单的答案实际上并不值得回答:只是这样做。
如果存在误解:无论您在makefile的配方行中拥有什么,或者作为int x = ((int)a) - '0';
的参数,都会被提供给系统的shell。在Windows上,shell为$(shell )
,cmd将理解您的cmd
命令。
但是有一个陷阱:像copy
这样的外壳(我现在称之为 posix shells )也适用于Windows。例如,bash
(msys
的最小构建环境)附带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