Ниже приводится мое настоящее «решение» моей проблемы. Я думал, что make должен был делать это автоматически, когда правило не было найдено для зависимости в другом каталоге, но я не могу понять, почему я так думал. Вы знаете лучший способ?Вызов в другом каталоге
Существует другой каталог ../a/
, у которого есть Makefile для создания ../a/generated.h
.
.PHONY: FORCE
FORCE:
my.c: ../a/generated.h
cp --preserve=timestamps $< [email protected]
../a/generated.h: FORCE
$(MAKE) -C $(dir [email protected]) $(notdir [email protected])
У меня есть общий вид я могу использовать, чтобы избежать дублирования второе правило для каждого «внешнего» файла, но как я уже сказал, я подумал, что это все лишнее.
define REMOTE
$(1): FORCE
$$(MAKE) -C $$(dir [email protected]) $$(notdir [email protected])
endef
$(eval $(call REMOTE,../a/generated.h))
$(eval $(call REMOTE,../a/anotherGeneratedFile.h))
Это не очень хороший дизайн. У вас есть много других каталогов с их собственными make-файлами? – Beta
Казалось бы, я забыл, что make автоматически перестроит любые файлы, которые включены в 'Makefile'. – altendky