在运行时使用makefile复制文件
我以前在windows上用批处理脚本编译程序,但最近发现makefiles效率更高 我在在运行时使用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
.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