我有一个make目标,根据环境变量的值,它有不同的输出。
我如何才能:
,则不重新生成目标。
我想我可以用当前环境变量值创建或有条件地更新文件,然后使用该文件作为make依赖项。我找不到一种优雅的方法来使用本地工具来完成这个任务。(sed -i总是更新文件的时间戳,也许awk是可能的)
发布于 2020-01-17 13:02:50
使用shell脚本更新保存变量值的文件如何?
SHELL = /bin/bash
var_file := var.txt
var_name := NAME
is_var_updated = [[ ! -e $(var_file) ]] || [[ "$$(< $(var_file))" != "$($(var_name))" ]]
update_var_file = echo "$($(var_name))" > $(var_file)
$(shell $(is_var_updated) && $(update_var_file))
output.txt: $(var_file)
echo "Name is $$NAME" > $@这个是这样工作的。
$ ls
Makefile
$ NAME=foo make
echo "Name is $NAME" > output.txt
$ NAME=foo make
make: `output.txt' is up to date.
$ NAME=bar make
echo "Name is $NAME" > output.txt发布于 2020-01-17 11:57:18
使条件句可以作为一个起点:
.PHONY: all
FILE := foobar
ifdef ENV_VAR
OLD_ENV_VAR := $(shell [ -f $(FILE) ] && cat $(FILE))
ifeq ($(ENV_VAR),$(OLD_ENV_VAR))
DONTRUN := 1
endif
endif
ifdef DONTRUN
all:
@echo 'ENV_VAR unmodified'
else
$(shell printenv ENV_VAR > $(FILE))
all:
@echo 'ENV_VAR undefined or modified'
endifhttps://stackoverflow.com/questions/59784768
复制相似问题