Как запустить перестроение файла предварительных требований Makefile ТОЛЬКО при вызове указанной цели c? - PullRequest
0 голосов
/ 01 апреля 2020

Я пока не нашел ответа, поэтому думаю, что это не повторный вопрос.

У меня есть некоторый Makefile в соответствии с:

include prerequisite_2

all: prerequisite_1 prerequisite_2

clean:
    rm *.mod

prerequisite_1:
    mkdir somedir

prerequisite_2:
    re-write existing file

Проблема в том, что я хочу, чтобы prerequisite_2 перестраивался всякий раз, когда вызывается цель по умолчанию (all) или когда prerequisite_2 вызывается из командной строки, и я знаю, что могу использовать touch prerequisite_2, FORCE или .PHONY для достижения этой цели. Однако я НЕ хочу, чтобы он запускался каждый раз (записанный файл содержит информацию о зависимостях для файлов Fortran), так как нет смысла перестраивать это при вызове: make clean

Возможно ли это эмулировать эффекты FORCE или .PHONY только при вызове зависимых целей?

1 Ответ

0 голосов
/ 01 апреля 2020

Вы можете увидеть, каковы цели цели, посмотрев на переменную MAKECMDGOALS.

Таким образом, вы можете сделать что-то вроде:

ifeq (,$(if $(MAKECMDGOALS),$(filter-out all prerequisite-2,$(MAKECMDGOALS))))
include prerequisite-2
endif

Условие if будет истинным, если MAKECMDGOALS - пустая строка, или если она содержит только all и / или prerequisite-2, но не если она содержит какую-либо другую цель.

Обычно это не то, что вам нужно. Обычно вы хотите отключить включение, только если используются определенные цели (clean - пример classi c).

Эта точная ситуация даже обсуждается в руководстве GNU make .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...