Make-файл, правила шаблона и каталоги

Я хочу записать (gmake) make-файл для компилятора, который - в отличие от gcc - помещает все выходные файлы в определенный каталог. К сожалению, это поведение не может быть изменено.

Мои источники находятся в нескольких каталогах. Как я пишу правило шаблона, которое позволяет мне скомпилировать источники.

Хорошо, это немного неясно. Вот пример. Моему исходному взгляду может понравиться это:

./folder1/foo.c
./folder2/bar.c

и выходные файлы закончатся как это:

./obj/foo.obj
./obj/bar.obj

Как должен, мое правило скомпилировать мои источники похоже?

%.obj : %.c 
   $(COMPILER) -c $< 

не будет работать.

Какие-либо идеи? Я хотел бы избежать неявного правила для каждого исходного файла...

14
задан Nils Pipenbrinck 26 December 2009 в 16:59
поделиться

1 ответ

Извлечено из моего файла Makefile:

OBJS: = $ (sort $ (patsubst% .cpp, $ (OBJECT_DIRECTORY) /%. O, $ (patsubst% .c, $) (OBJECT_DIRECTORY) /%. O, $ (notdir $ (SRCS)))))

Где OBJECT_DIRECTORY указывает на каталог объекта, а SRCS - это список исходных файлов ( который вы даже можете заполнить, используя $ (подстановочный знак) ).

Затем в Makefile у меня есть:

define define_compile_rules
$(OBJECT_DIRECTORY)/%.o: $(1)%.c
  @echo " + Compiling '$$<'"
  @mkdir -p $$(@D)
  $(CC) $$(CFLAGS) -o $$@ -c $$<
endef

$(foreach directory,$(sort $(dir $(SRCS))),$(eval $(call define_compile_rules,$(directory))))

См. функцию $ (eval) .

25
ответ дан 1 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: