Как я проверяю зависимости при вызове sub-make для сборки при наличии изменений? - PullRequest
3 голосов
/ 17 февраля 2009

Если у меня есть make-файл, который вызывает другой make-файл, как мне заставить главный make-файл правильно проверить, изменились ли зависимости подчиненного make-файла?

Например, если у меня есть правило

server:
     @cd $(SERVERDIR) && $(MAKE)

Это вызывает make в подкаталоге, в котором я создаю исполняемый «сервер». Однако, если я изменяю один из файлов, составляющих сервер, родительский make не видит изменений и отказывается перестраивать сервер - "make:` server 'обновлен ".

Как я могу заставить основной make-файл правильно обнаруживать изменения в одном из зависимых файлов (например, в $ (SERVERDIR) /server.c, например?

Ответы [ 3 ]

7 голосов
/ 17 февраля 2009

Похоже, вы хотите использовать фальшивую цель

.PHONY: server
server:
     @cd $(SERVERDIR) && $(MAKE)

Здесь есть подробное описание цели Phony здесь , но краткое описание состоит в том, что вы сообщаете make-файлу, что никогда не будет файла, соответствующего этой цели сервера, и поэтому он не учитывать сервер в актуальном состоянии, если в каталоге есть файл с именем server.

1 голос
/ 17 февраля 2009

Вы не:

Но да, если у вас нет выбора, например, поскольку вы не управляете подфайлом, цель .PHONY - то, что вы ищете.

1 голос
/ 17 февраля 2009

Ваше целевое имя совпадает с именем одного из файлов или каталогов в вашем основном каталоге Makefile.

При условии, что вам нужно собрать все в подкаталоге с именем server, это правило:

server:
    $(MAKE) -C server

не будет работать, поскольку цель server является каталогом, не имеет исходных файлов и не требует сборки.

Вот этот:

srv:
    $(MAKE) -C server

будет работать, пока нет файла или каталога с именем srv.

...