GNU make“命令在第一个目标之前开始” [重复]
Posted
技术标签:
【中文标题】GNU make“命令在第一个目标之前开始” [重复]【英文标题】:GNU make "commands commence before first target" [duplicate] 【发布时间】:2014-09-27 19:30:12 【问题描述】:我一直在尝试在 Windows 上使用 MINGW 编译 GLEW,正如 here 所解释的那样 但是我得到“命令在第一个目标之前开始”
Makefile(我无法在此处设置格式)
谢谢
【问题讨论】:
makefile 不仅仅是一个 shell 脚本。如果你想学习编写 makefile,你应该阅读一些教程并从更简单的开始。 【参考方案1】:使期望“规则”具有以下形状:
target: prerequisites ...
command
...
在第一次调用 gcc 之前,您需要在 makefile 中定义一个目标。只需在开头添加一行glew:
。带有命令的每一行都需要以制表符开头。
请查看 make 手册的介绍部分以获取更多信息:https://www.gnu.org/software/make/manual/html_node/Introduction.html
您的 makefile (makefile.mod) 的修改版本
## makefile based on answer http://***.com/a/6005262/663518
## http://***.com/questions/6005076/building-glew-on-windows-with-mingw
.PHONY: glew
glew: libs exe
## libs
libs: lib/glew32.dll lib/glew32mx.dll
lib/glew32.dll:
@echo ##compiling libglew32
gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32.a src/glew.o
lib/glew32mx.dll:
@echo ##compiling libglew32mx
gcc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.mx.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32mx.dll -Wl,--out-implib,lib/libglew32mx.dll.a -o lib/glew32mx.dll src/glew.mx.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32mx.a src/glew.mx.o
## glewinfo and visualinfo programs.
exe: bin/glewinfo.exe bin/visualinfo.exe
bin/glewinfo.exe: lib/glew32.dll
@echo ##compiling glewinfo.exe
gcc -c -O2 -Wall -W -Iinclude -o src/glewinfo.o src/glewinfo.c
gcc -O2 -Wall -W -Iinclude -o bin/glewinfo.exe src/glewinfo.o -Llib -lglew32 -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
bin/visualinfo.exe: lib/glew32.dll
@echo ##compiling visualinfo
gcc -c -O2 -Wall -W -Iinclude -o src/visualinfo.o src/visualinfo.c
gcc -O2 -Wall -W -Iinclude -o bin/visualinfo.exe src/visualinfo.o -Llib -lglew32 -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
> make -f makefile.mod
##compiling libglew32
gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude...
...
make -f makefile.mod libs
构建 dll
make -f makefile.mod exe
构建 exe 和 dll(如果需要)
【讨论】:
这仍然不是makefile。它仍然是一个 shell 脚本。 手册说“makefile 还可以告诉 make 在明确询问时如何运行其他命令”;-) L 好的,我会问你一个反问。假设你有一个 shell 脚本,而你的老板说“这效率低下,用 C 重写”。您编写 main(),然后在 main() 中使用 sprintf 将旧脚本的行添加到单个大字符串中。最后,您使用“system()”函数来执行大字符串。问题是:你的老板会对此感到高兴还是不高兴?换句话说,您的程序是 C 程序,还是仍然是 shell 脚本?你也可以在这里说同样的话“C stdlib 的手册说,有函数“sprintf”和“system”” 谢谢你,就像一个魅力!我不得不用制表符替换空格,否则效果很好。以上是关于GNU make“命令在第一个目标之前开始” [重复]的主要内容,如果未能解决你的问题,请参考以下文章