У меня есть старый проект, для которого я пытаюсь создать несколько двоичных файлов, по одному для каждого объекта в каталоге. Я не могу за всю жизнь понять, как бороться с несколькими целями таким образом. Следующие работы, но мне кажется, я должен быть в состоянии иметь одно правило, чтобы связать их все, так сказать,gnu сделать несколько целей один объект каждый
# compile objects, no problem
%.o: %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected]
bin: bin.o
$(CC) -o [email protected] $< ../lib/libfoo.a -lm $(ARCH)
bar: bar.o
$(CC) -o [email protected] $< ../lib/libfoo.a -lm $(ARCH)
Один подход, который я приступить к работе, чтобы сдирать суффикс от цели имя, как это и скомпилировать и скомпоновать в один шаг, но он чувствует себя немного хаком,
%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) $< ../lib/libfoo.a -lm -o $(*F)
Отказ от ответственности: я презираю сделать
UPDATE 1: это то, что я закончил с
EXECS = bin bar ...
all: $(EXECS)
%: %.c
@echo "Building [email protected] from $<"
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected]
$(CC) $(CFLAGS) $(CPPFLAGS) [email protected] ../lib/libfoo.a -lm -o [email protected]
Второе правило помогло мне приблизиться к тому, что я хотел, не знаю, почему, но когда я использовал ваш пример, «сделать все» не выполнял какое-то неявное правило для каждого из двоичных файлов в списке (строка бинов ...) , –