Makefile - сделать исполняемый файл для каждого .c в папке - PullRequest
8 голосов
/ 03 апреля 2012

Мой вопрос обманчиво прост, но я потерял несколько часов обучения, пытаясь найти решение. Я пытаюсь создать Makefile, который создает исполняемый файл для каждого файла .c в каталоге.

Я пробовал следующее:

CC = gcc
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRCS))

all: $(OBJS)
$(CC) $< -o $@

%.o: %.c
    $(CC) $(CPFLAGS)  -c  $<

, но при этом создаются только .o файлы, а не исполняемые файлы. Мне нужно правило, которое делает исполняемый файл для каждого из этих .o файлов. Примерно так:

gcc src.o -o src

Ответы [ 3 ]

6 голосов
/ 03 апреля 2012

Ответ Роба не работает на моей машине.Возможно, как полный Makefile:

SRCS = $(wildcard *.c)

all: $(SRCS:.c=)

.c:
     gcc $(CPFLAGS) $< -o $@

(последние две строки, на моей машине, не нужны, так как правила по умолчанию адекватны.)

1 голос
/ 03 апреля 2012

Ваш all говорит это просто для создания объектных файлов.Добавьте что-то вроде

EXEC = $ (patsubst% .c,%, $ (SRCS))

все: $ (EXEC)

0 голосов
/ 05 апреля 2012

Попробуйте выполнить следующее:

% : %.c
    $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $<
all: $(basename $(wildcard *.c))

, и вам даже не нужны первые две строки, поскольку make знает, как скомпилировать и связать файлы .c с исполняемыми файлами.Тем не менее, часто необходимо изменить встроенные рецепты make.

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