首页 > 解决方案 > 如何根据环境变量的值更新 Makefile 目标?

问题描述

我有一个 make 目标,该目标将根据环境变量的值具有不同的输出。

我怎样才能:

我认为我可以使用当前环境变量值创建或有条件地更新文件,然后将该文件用作 make 依赖项。我找不到使用本机工具的优雅方法。(sed -i总是更新文件的时间戳,也许 awk 是可能的)

标签: shellawksedmakefile

解决方案


使用 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

推荐阅读