Можно ли отображать переменные вне правил с помощью GNU Make?

Отключения обновления времени доступа должно быть достаточно:

zfs set atime=off bpool/backup
1
13.06.2021, 19:41
2 ответа
В

GNU makeесть функция, позволяющая сделать именно это, и она называется $(info....).

Вы можете поместить следующую строку вне rule, и GNU make выполнит ее:

$(info variable x = $x))

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

make -f - <<\eof

dumpvar = $(info variable `$1' value is >>>$($1)<<<)

ssl_enable = NO
$(call dumpvar,ssl_enable)

.PHONY: all
all:;@:
eof

На стауте будет отображаться следующее:

variable `ssl_enable' value is >>>NO<<<
1
28.07.2021, 11:25

гм, возможно, но бесполезно.

Вы должны понимать, что Makefile не похож на сценарий оболочки. Makefile определяет цели и то, что нужно сделать, чтобы сделать эти цели. Если вы помните об этом, выполнение ложной команды в Makefile становится концептуальной проблемой. Когда эта команда будет выполнена? Нет цели, которая могла бы вызвать эту команду.

Можно:

MY_VAR := $(shell ls)

all:
    @echo MY_VAR IS $(MY_VAR)

Обратите внимание, что я предположил GNU make. Это выполнит lsдля вас и поместит вывод в MY_VAR. Но это взлом, которого следует избегать.

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

extra: 
     @echo $(x)

и добавьте это как предварительное требование -для всех остальных целей.

Бонус :связан с тем, что в строке @echo $(x)нет разделителя. В этом месте файла makeожидает цель с :, а :в этой строке нет. (есть и другие возможности, такие как присвоение новой переменной и т. д., конечно)

3
28.07.2021, 11:25

Теги

Похожие вопросы