Как я проверяю зависимости при вызове 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 цель это то, что вы ищете.

Другие вопросы по тегам