在运行时使用makefile复制文件

iKl*_*lsR 5 makefile copy cp

我曾经在Windows上使用批处理脚本来编译程序,但最近发现了makefile,效率更高。

我的.bat文件中包含以下行,该行在运行时将一些dll复制当前目录中,并且运行良好。

copy C:\lib\glfw\glfw.dll 
Run Code Online (Sandbox Code Playgroud)

我在makefile中尝试了同一行,甚至尝试了替代方法,cp但是即使文件位于我指定的位置,我的终端也会打印此错误

process_begin: CreateProcess(NULL, copy C:\lib\glfw\glfw.dll, ...) failed
make (e=2): The system cannot find the file specified.
make: *** [core.exe] Error 2
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的完整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) *~
Run Code Online (Sandbox Code Playgroud)

Rei*_*eek 5

看来您是在不了解的MSYS(或MinGW)环境中运行此文件copy。相反,您可以使用

cp C:\lib\glfw\glfw.dll .
Run Code Online (Sandbox Code Playgroud)

如果要避免使用* nix like cp,则可以使用xcopy以下方法:

xcopy //Y C:\lib\glfw\glfw.dll
Run Code Online (Sandbox Code Playgroud)

请注意必须使用double //来转义/

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

使用当前设置,DOS将找不到任何内置命令。请参阅选择外壳以了解如何make确定使用哪个外壳。