为什么每次都"build"以下重建文件目标



我有以下代码来解开目录中的所有文件,并将其移动到构建目录中。如果我多次调用make,它每次都会尝试执行"构建"目标,即使构建目录已经存在。有人见过这个吗?

我发现了这个问题,但不一样。Makefile始终运行目标

操作系统:Ubuntu 12.04程序:GNU Make 3.81

build: 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

这个与您链接的问题基本相同。您从未创建过名为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的"代码气味"。它们很少是最好/惯用的做事方式。

最新更新