Как мне проверить зависимости при вызове вложенного элемента для сборки, когда есть изменения?

StackOverflow https://stackoverflow.com/questions/556876

  •  05-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Там есть подробное описание Фальшивой цели здесь, но краткое описание заключается в том, что вы сообщаете makefile, что никогда не будет файла, соответствующего этому целевому серверу, и поэтому он не будет считать сервер обновленным, если в каталоге есть файл с именем server.

Другие советы

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

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

server:
    $(MAKE) -C server

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

Этот:

srv:
    $(MAKE) -C server

будет работать до тех пор, пока не будет вызван файл или каталог srv.

Ты этого не делаешь:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top