Как я проверяю зависимости при вызове sub-make для сборки, когда есть изменения?
Если у меня есть make-файл, который вызывает другой make-файл, как мне получить основной make-файл, чтобы правильно проверить, изменились ли зависимости подчиненного make-файла?
Например, если у меня есть правило
server:
@cd $(SERVERDIR) && $(MAKE)
Это вызывает make в подкаталоге, в котором я создаю исполняемый "сервер". Однако, если я изменяю один из файлов, составляющих сервер, родительский make не видит изменений и отказывается перестраивать сервер - "make: `server'обновлен ".
Как я могу заставить основной make-файл правильно обнаруживать изменения в одном из зависимых файлов (например, в $(SERVERDIR)/server.c?
3 ответа
Похоже, вы хотите использовать фальшивую цель
.PHONY: server
server:
@cd $(SERVERDIR) && $(MAKE)
Здесь есть подробное описание цели Phony, но краткое описание состоит в том, что вы говорите make-файлу, что никогда не будет файла, соответствующего этой цели сервера, и поэтому он не будет считать сервер обновленным, если есть файл с именем сервера в каталоге.
Ваше целевое имя совпадает с именем одного из файлов или каталогов в вашем главном Makefile
каталог.
Предполагая, что вам нужно собрать все в подкаталоге server
это правило:
server:
$(MAKE) -C server
не будет работать, как цель server
является каталогом, не имеет исходных файлов и не нуждается в сборке.
Вот этот:
srv:
$(MAKE) -C server
будет работать до тех пор, пока не будет вызван файл или каталог srv
,
Вы не
Но да, если у вас нет выбора, например, потому что вы не контролируете подфайл, .PHONY
цель это то, что вы ищете.