В make-файле игнорируются расширения? - PullRequest
3 голосов
/ 24 августа 2011

A cube.c хранится в кубе папки. Makefile выглядит следующим образом

LDFLAGS=-lglut -lGLU

all: cube

Может ли кто-нибудь помочь мне решить следующие вопросы?

  • cube означает cube.c? почему cube не имеет расширения .c?

  • После строки all: cube нет команды, и LDFLAGES не используется. Почему это может быть написано таким образом?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

cube означает cube.c? почему куб не имеет расширения .c?

Это имя получившегося исполняемого файла.

После строки all нет команды: cube, а LDFLAGES - нет б.

LDFLAGS используется в неявных правилах

  • n.o производится автоматически из n.c с рецептом вида $(CC) $(CPPFLAGS) $(CFLAGS) -c

  • n создается автоматически из n.o при запуске компоновщика (обычно
    называется ld) через компилятор C. Точный рецепт используется $(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

См. неявные правила .

1 голос
/ 24 августа 2011

cube - это сам исполняемый файл. Ваш make, вероятно, имеет встроенные правила для компиляции файла .c в файл .o (с использованием CFLAGS) и для привязки одного файла .o (с использованием LDFLAGS) к исполняемому файлу. Поэтому все, что вам нужно сделать, это предоставить LDFLAGS и дать make хотя бы одну цель, и эта цель условно называется all.

Если вы явно напишите правила, которые make может вывести, у вас будет что-то вроде этого:

CC=cc
CFLAGS=
LDFLAGS=-lglut -lGLU

all: cube

cube: cube.o
    $(CC) $(LDFLAGS) cube cube.o

cube.o: cube.c
    $(CC) $(CFLAGS) -c cube.c

В руководстве по GNU Make есть раздел о неявных правилах:

http://www.gnu.org/s/hello/manual/make/Implicit-Rules.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...