在运行时使用makefile复制文件

在运行时使用makefile复制文件,makefile,copy,cp,Makefile,Copy,Cp,我以前在windows上用批处理脚本编译程序,但最近发现makefiles效率更高 我在.bat文件中有一行代码,它在运行时将一些DLL复制到当前目录中,并且工作得非常好 copy C:\lib\glfw\glfw.dll 我在makefile中尝试了同一行,甚至尝试了可选的cp,但即使文件位于我指定的位置,我的终端也会打印此错误 这是我正在使用的完整makefile。请注意,如果没有复印行,它就像一个符咒。。我做错了什么或者这可能吗 EXEC = core.exe OBJS = src/o

我以前在windows上用批处理脚本编译程序,但最近发现makefiles效率更高

我在
.bat
文件中有一行代码,它在运行时将一些DLL复制到当前目录中,并且工作得非常好

copy C:\lib\glfw\glfw.dll 
我在makefile中尝试了同一行,甚至尝试了可选的
cp
,但即使文件位于我指定的位置,我的终端也会打印此错误

这是我正在使用的完整makefile。请注意,如果没有复印行,它就像一个符咒。。我做错了什么或者这可能吗

EXEC = core.exe
OBJS = src/obp.o

CC = g++

CFLAGS  = -W -Wall
LIBS    = -lSOIL -lglew32 -lglfw -lopengl32
LDFLAGS =

$(EXEC): $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
    copy C:\lib\glfw\glfw.dll

clean:
    rm -f $(EXEC) $(OBJS) *~

您可能需要将反斜杠加倍,以便
make
理解您想要的内容:

copy c:\\lib\\glfw\\glfw.dll

Make来自Unix背景,其中文件分隔符是
/
,因此在Windows环境中使用它有时会有点尴尬。

看起来您是在
MSYS
(或
MinGW
)环境中运行它的,该环境不知道
copy
。相反,您可以使用

cp C:\lib\glfw\glfw.dll .
如果要避免使用类似*nix的
cp
,则可以使用
xcopy
,如下所示:

xcopy //Y C:\lib\glfw\glfw.dll
请注意转义
/
所需的双
/

或者您可以在常规的
MS-DOS
环境中运行此操作,在这种情况下,
clean
目标将无法工作,因为将找不到
rm
,您应该使用
del


使用当前设置,将找不到任何内置的
DOS
命令。请参阅阅读有关
make
如何确定要使用哪个shell的信息。

它会打印带有\\的新行,但与上面的错误相同。也许您可以尝试使用
/
,但我不确定
copy
命令是否会理解这一点。我使用scons构建blender,但没有。我希望尽可能简单*编辑-我可以试试。是不是找不到
副本
?你怎么会用
rm
,它能找到吗?你是在
MSYS
环境下运行的吗?我从一开始就在dos环境下运行,cp也不起作用。我只能想做一些调试步骤。你知道它是从哪里来的吗?您能否在命令提示符下执行
where rm
?(只有当您的Windows版本较新且支持
where
)时,这才有意义)。另外,您的
$(SHELL)
$(MAKESHELL)
的值是多少?您可以在顶部使用类似于
$(info SHELL=$(SHELL))
的东西从
生成文件中打印它们。如果这有帮助,则不知道,但是$(info SHELL…)返回SHELL=C:/MinGW/msys/1.0/bin//sh.exe,其中rm打印C:\MinGW\msys\1.0\bin\rm.exe是的,这确实有帮助。因此,您正在运行一个
MSYS
shell,却没有意识到它。您可以从刚才打印的路径中看到这一点。这意味着我最初的答案应该有效。使用
cp
时会出现什么错误?您没有忘记将句点添加到
cp
命令的末尾吗?X_X。。我忘了
:D。。它起作用了。谢谢顺便说一句,它有什么作用?
xcopy //Y C:\lib\glfw\glfw.dll