Первая цель в makefile
- это та, которая построена, когда вы не укажете конкретное имя цели.
В вашем makefile
, default
во-первых, поэтому он создан.
Часто вы создадите цель all
в качестве первой цели и перечислите программы, которые должны быть построены более или менее хитрыми средствами.
.PHONY: default all clean
default:
@echo "You must specify which program you want built (or specify all)"
SRCS = $(wildcard *.c)
PROGS = ${SRCS:.c=}
all: ${PROGS}
%.o:%.c
gcc -c $< -o [email protected]
clean:
rm -f *.o
.PHONY
цель определяет, что default
, all
и clean
не настоящие файлы, но phony targets.
У меня есть каталог со многими исходными файлами в нем, и у меня есть правило по умолчанию, аналогичное приведенному выше, как первая цель, но у меня также есть цель all
, так что make all
работает разумно.
Я предпочитаю использовать ${...}
нотации около make
переменных, которые make
всегда принимал; многие люди используют $(...)
обозначение все время.
вы имеете в виду вам исходные файлы не компилируется? –
Ожидаете ли вы, что дефолт прошел все цели? Как бы то ни было, если вы хотите скомпилировать foo.c, вы должны ввести 'make foo.o'. – tabstop