сделать зависимость от всех файлов в подкаталоге (подмодуль git) - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу написать (GNU) make-правило, которое зависит от наличия какого-либо файла (любого произвольного файла) в подкаталоге. В моем конкретном случае этот подкаталог является подмодулем git.

Вот что у меня есть:

DEP = submod/.git

$(DEP):
        git submodule update --init $(@D)

submod/%: | $(DEP)
        @ # why do I need this?

install: submod/junk.c
        echo installing

Если я затем наберу make install, команда git будет запущена (измените ее на mkdir -p $(@D); touch $@ для теста, не относящегося к git), и make не будет жаловаться.

У меня два вопроса. Прежде всего, есть ли какие-либо побочные эффекты в манекене для рецепта submod/%, о котором я должен беспокоиться? Во-вторых, и что еще интереснее, зачем мне этот рецепт вообще? Если я уберу это, сделаю ошибки:

make: *** No rule to make target 'submod/junk.c', needed by 'install'.  Stop.

Моя единственная гипотеза состоит в том, что make выполняет некоторую оптимизацию на основе файлов, которые существуют при запуске, и с версией без рецепта она думает, что может просто ожидать, что файл будет существовать, когда это необходимо, но с любым рецептом там , он не может сделать эту оптимизацию, и он переоценивает, когда это необходимо. Если это правда, это ошибка или что-то, что должно быть изменено?

...