Makefile же цели различных входов - PullRequest
0 голосов
/ 30 мая 2018

Это требование является предварительным условием для большей системы изготовления.Я не могу / не хочу менять систему make, поэтому необходимость иметь выходные данные этой марки имеет одну цель.Хотя у меня много лет программирования, я новичок в том, что касается make-файлов.Так что любая помощь очень ценится.Теперь о проблеме.

Во-первых, я не хочу, чтобы цель была построена, если никакие входные данные не изменились.Именно для этого предназначен стандартный make-файл.

Проблема, с которой я столкнулся, заключается в построении цели при изменении входных данных.Входные данные состоят из ЛИБО переменной среды ИЛИ пары файлов.ПРИМЕЧАНИЕ Переменная Environment устанавливается вне make-файла.

Вот сценарии.

1 Переменная среды и файлы не изменены.Цель не построена.2 Переменная окружения не изменена.Файлы изменены.Цель построена.3 Переменная окружения изменена.Файлы не изменены.Цель построена.4 Переменная окружения изменена.Файлы изменены.Построение цели.

Проблема, с которой я столкнулся, - это номер 3. Как получить цель для построения, когда только переменная окружения изменяется по сравнению с предыдущей настройкой.ПРИМЕЧАНИЕ. Нет проблем с тем, чтобы система поддерживала файл или параметр, содержащий предыдущее значение переменной среды, для отслеживания изменений

1 Ответ

0 голосов
/ 30 мая 2018

Так как вы не предоставили свою существующую попытку make-файла или не сообщили подробности о том, какие переменные вас интересуют, я просто покажу, как написать рецепт "check env vars", и предоставлю вам его для встраивания в ваш make-файл..

Заключайте сделки с файлами, и единственное сравнение, которое он может проводить, - это временные метки файлов.Таким образом, все предварительные условия должны быть выражены в виде файлов и временных меток.

Вы можете сделать это:

result: check-env.out $(SOMEFILES)
        touch $@

check-env.out : FORCE
        echo "$$SOMEVAR" > $@.new
        test -f '$@' && cmp -s '$@'.new '$@' \
            && rm -f '$@'.new \
            || mv -f '$@'.new '$@'
FORCE:

Предварительное условие FORCE используется для обеспечения того, что рецепт check-env.outвсегда бежит.Однако он обновляется только при изменении содержимого переменной, поэтому цель, которая зависит от нее (в данном случае result), не будет обновлена ​​из-за этой цели, если она не изменилась.

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