gpt4 book ai didi

shell - Makefile 中的递归清理

转载 作者:行者123 更新时间:2023-12-01 12:46:29 25 4
gpt4 key购买 nike

我正在尝试创建一个 Makefile,它可以在调用时递归地构建/清理。我的构建工作正常,但我在使用 clean 命令时遇到错误。

我的目录结构是这样的:

main
|
+-- Makefile
|
+-- common
| |
| +-- gcas_debug
| | |
| | +-- Makefile
| + -- gcas_nvdata
| |
| +-- Makefile
+-- gcinit
+-- Makefile

当我在主目录中调用 make 时,它会按照我的意愿构建所有内容,但是当我调用 make clean 时,它会执行以下操作:

mike@mike-VirtualBox:~/iCOM/framework$ make clean
for d in common/gcas_debug common/gcas_nvdata; \
do \
make --directory=$f clean; \
done
make: the `-C' option requires a non-empty string argument
Usage: make [options] [target] ...
Options:
-b, -m Ignored for compatibility.
...

我不明白为什么 clean 命令不起作用...有什么建议吗?
完整(主要)Makefile:

lib_gcas_debug := common/gcas_debug
lib_gcas_nvdata := common/gcas_nvdata
libraries := $(lib_gcas_debug) $(lib_gcas_nvdata)
DESTDIR=$(PWD)/output
bindir=

gc_init := gcinit
EXE := $(gc_init)/$(gc_init)

.PHONY: all $(gc_init) $(libraries)
all: $(gc_init)

$(gc_init) $(libraries):
$(MAKE) --directory=$@

$(gc_init): $(libraries)

install: $(gc_init)
install -d -m 0755 $(DESTDIR)$(bindir)
install -m 0755 $(EXE) $(DESTDIR)$(bindir)

clean:
for d in $(libraries); \
do \
$(MAKE) --directory=$$f clean; \
done

编辑:如果我将 for dfor $d 交换,我会得到:

mike@mike-VirtualBox:~/iCOM/framework$ make clean
for in common/gcas_debug common/gcas_nvdata; \
do \
make --directory= clean; \
done
/bin/sh: -c: line 0: syntax error near unexpected token `common/gcas_debug'
/bin/sh: -c: line 0: `for in common/gcas_debug common/gcas_nvdata; \'
make: *** [clean] Error 1

最佳答案

这对我有用:

SUBDIRS := foo bar baz

.PHONY: subdirs $(SUBDIRS) clean all

subdirs: $(SUBDIRS)

$(SUBDIRS):
$(MAKE) -C $@ $(MAKECMDGOALS)

clean: $(SUBDIRS)
rm -rf dist

dist: $(SUBDIRS) dist/.build_marker

dist/.build_marker:
mkdir -p dist
for d in $(SUBDIRS) ; do cp $$d/dist/* dist ; done
touch dist/.build_marker

我只需要在 dist 目标中使用 for 循环来复制文件。这允许 make -j 构建并行性,更不用说更易于阅读的 Makefile。

关于shell - Makefile 中的递归清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347543/

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