Команды GNU make начинаются до первой цели

Я пытался скомпилировать GLEW с MINGW в Windows, как описано здесь. получить «команды начинаются до первой цели»

Makefile (я не могу заставить форматирование работать здесь)

Спасибо


person Eejin    schedule 27.09.2014    source источник
comment
Makefile — это не просто сценарий оболочки. Если вы хотите научиться писать make-файлы, вам следует прочитать несколько руководств и начать с чего-нибудь попроще.   -  person Beta    schedule 28.09.2014


Ответы (1)


Заставьте ожидать «правила» со следующей формой:

target: prerequisites ...
    command
...

Вам необходимо определить цель в make-файле перед первым вызовом gcc. Просто добавьте строку с glew: в начале. Каждая строка с командой должна начинаться с символа табуляции.

Дополнительную информацию см. в разделе введения руководства make: https://www.gnu.org/software/make/manual/html_node/Introduction.html

измененная версия вашего make-файла (makefile.mod)

## makefile based on answer http://stackoverflow.com/a/6005262/663518
## http://stackoverflow.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 (при необходимости)

person David L.    schedule 28.09.2014
comment
Это все еще не makefile. Это все еще сценарий оболочки. - person Mark Galeck; 29.09.2014
comment
В руководстве говорится, что makefile также может указать make, как запускать разные команды, когда их явно спрашивают ;-) - person David L.; 29.09.2014
comment
L Хорошо, я задам вам риторический вопрос. Предположим, у вас есть сценарий оболочки, и ваш босс говорит, что это неэффективно, перепишите его на C. Вы пишете main(), затем в main() вы используете sprintf для добавления строк старого сценария в одну большую строку. Наконец, вы используете функцию system() для выполнения большой строки. Вопрос в том, будет ли ваш начальник доволен этим или нет? Другими словами, является ли ваша программа программой C или это все еще сценарий оболочки ?? То же самое можно сказать и здесь В мануале по C stdlib написано, есть функции sprintf и system - person Mark Galeck; 29.09.2014
comment
Спасибо, работает как шарм! Мне пришлось заменить пробелы вкладками, но в остальном все работало отлично. - person Eejin; 29.09.2014