gpt4 book ai didi

makefile - 为什么每次都按照makefile重建目标 "build"

转载 作者:行者123 更新时间:2023-12-04 23:59:35 24 4
gpt4 key购买 nike

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

我发现了这个问题,但它不一样。
Makefile always running target

操作系统: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 target 没有做任何有用的事情(尽管我认为这是一个精简的 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 的“代码异味”。它们很少是最好的/惯用的做事方式。

关于makefile - 为什么每次都按照makefile重建目标 "build",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com