我有以下代码来解压缩目录中的所有文件并将其移动到构建目录。如果我多次调用make,它会尝试每次都执行“build”目标,即使build目录已经存在。有没有人碰到过这个?
我发现了这个问题,但不一样。 Makefile always running target
操作系统:Ubuntu 12.04 程序:GNU Make 3.81build: mkBuildDir untar
chmod 700 build
.PHONY: mkBuildDir untar
mkBuildDir:
mkdir build
untar: *.tar.gz
for prefix in *.tar.gz; do \
tar xvf $$prefix --directory=build; \
done
clean:
rm -Rf build
答案 0 :(得分:7)
此 与您关联的问题几乎相同。您永远不会创建名为mkBuildDir
的文件,因此它始终是过时的,因此build
始终过时。
你的mkBuildDir
目标没有做任何有用的事情(虽然我认为这是一个简化的makefile)。相反,如果你做了
# it'd be better to list the TARFILES explicitly, though this will probably work
TARFILES=`ls *.tar.gz`
all: build untar
build: $(TARFILES)
test -d build || mkdir build
chmod 700 build
for prefix in $(TARFILES); do \
tar xvf $$prefix --directory=build; \
done
clean:
rm -Rf build
可能会完成您正在寻找的目标。
在Makefile中有太多虚假目标通常是makefile'代码味道'。它们很少是最佳/惯用的做事方式。