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}
问题是您在 INSTALLSRC
之后 定义了将它作为先决条件的规则。因此,当 Make 评估先决条件列表时,变量为空,因此 Make 认为不需要构建 foo.txt
。如果您有 simplified 这个 makefile 集合,这将非常明显。
修复很简单;交换 inner/common.mk
中的两行:
INSTALLSRC=${SRC}
include ../../common.mk
和 GNUMakefile:
include Makefile
include ../common.mk
我对这个 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}
问题是您在 INSTALLSRC
之后 定义了将它作为先决条件的规则。因此,当 Make 评估先决条件列表时,变量为空,因此 Make 认为不需要构建 foo.txt
。如果您有 simplified 这个 makefile 集合,这将非常明显。
修复很简单;交换 inner/common.mk
中的两行:
INSTALLSRC=${SRC}
include ../../common.mk
和 GNUMakefile:
include Makefile
include ../common.mk