Makefile:变量未正确扩展

Makefile: variables don't get expanded correctly

我对这个 Makefile 结构有问题。

make commit.install 应该创建 foo.txt 然后将其放入某个文件夹。但是,make 不会调用创建 foo.text 的目标。这意味着我必须调用 make foo.txt 来创建文件本身,然后调用 make commit.install 来复制它。我觉得make不扩展变量依赖有问题

./common.mk

src.install: ${INSTALLSRC}
        mkdir -p result
        for f in ${INSTALLSRC}; do \
                cp -a $$f result/.; \
        done

commit.install: src.install
        echo "finished"

clean:
        rm -rf result

./inner/nested/GNUmakefile

include ../common.mk

include Makefile

./inner/nested/Makefile

SRC=foo.txt

foo.txt:
        echo "hello world" > foo.txt

./inner/common.mk

include ../../common.mk

INSTALLSRC=${SRC}

Repository

问题是您在 INSTALLSRC 之后 定义了将它作为先决条件的规则。因此,当 Make 评估先决条件列表时,变量为空,因此 Make 认为不需要构建 foo.txt。如果您有 simplified 这个 makefile 集合,这将非常明显。

修复很简单;交换 inner/common.mk 中的两行:

INSTALLSRC=${SRC}

include ../../common.mk

和 GNUMakefile:

include Makefile

include ../common.mk