Makefile相同的目标不同的输入

时间:2018-05-29 23:52:07

标签: makefile

此要求是较大制造系统的必备条件。 我不能/不希望更改系统make,因此需要使此make的输出具有单个目标。虽然我有多年的编程,但我是关于makefile的新手。所以任何帮助都非常感谢。现在问题。

首先,如果没有输入改变,我不希望建立目标。究竟什么是标准的makefile。

我遇到的问题是在输入发生变化时建立目标。输入由环境变量或几个文件组成。注意环境变量在makefile之外设置。

以下是方案。

1环境变量和文件未更改。目标没有建成。 2环境变量未更改。文件已更改。目标已建成。 3环境变量发生了变化。文件未更改。目标已建成。 4环境变量发生了变化。文件已更改。目标已建成。

我遇到的问题是3号。当只有环境变量从之前的设置改变时,我如何获得构建目标。注意让系统维护包含先前环境变量值的文件或设置以跟踪更改

没有问题

1 个答案:

答案 0 :(得分:0)

由于您没有提供现有的makefile尝试或提供有关您关注的变量的任何详细信息,因此我将展示如何编写“check env vars”配方并将其嵌入到makefile中

处理文件,它可以进行的唯一比较是文件时间戳。因此,所有先决条件决策必须以文件和时间戳表示。

你可以这样做:

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)将不会因此目标而更新。