6

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

我的文件中有这一行,它在运行时.bat将一些 dll 复制到当前目录,并且运行良好。

copy C:\lib\glfw\glfw.dll 

我在我的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

这是我正在使用的完整生成文件。请注意,如果没有复制行,它就像一个魅力..我做错了什么或者这可能吗?

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) *~
4

2 回答 2

5

看起来你是从一个MSYS(或MinGW)环境中运行它的,它不知道copy. 相反,您可以使用

cp C:\lib\glfw\glfw.dll .

如果你想避免 *nix like cp,那么你可以使用xcopy如下:

xcopy //Y C:\lib\glfw\glfw.dll

请注意//转义/.

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

DOS使用您当前的设置,将找不到任何内置命令。请参阅选择 shell以了解如何make确定要使用的 shell。

于 2012-08-01T02:51:52.283 回答
0

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

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

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

于 2012-08-01T00:34:46.083 回答