为什么跟随makefile每次都重建目标"build"

Par*_*rth 4 makefile gnu-make

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

我发现了这个问题,但不一样. 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
Run Code Online (Sandbox Code Playgroud)

Nor*_*ray 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
Run Code Online (Sandbox Code Playgroud)

这可能会完成你正在寻找的东西.

在Makefile中有太多虚假目标通常是makefile'代码味道'.它们很少是最佳/惯用的做事方式.