几天前,我在Stack Overflow上发布了一个有关如何编写分层Makefile(http://stackoverflow.com/questions/1498213/make-hierarchical-make-file)的答案。然而,这个答案被删除了,因此我认为它完全是错误的或离题(或两者都有)。
我想知道如何编写分层Makefile。这是一个调用子目录中几个Makefile的Makefile。我假设一个目录结构,如下所示:
- project
|--module1
|--Makefile
|--...
|--module2
|--Makefile
|--module2.1
|--module2.2
|--...
|--module3
|--Makefile
|--...
|--etc
我还假设项目成员仅就一组最小的Makefile目标(re:all(默认)、clean、install等)达成了共识。因此,以下命令及make标志将被传播到模块中:cd project
make clean
make -k
make install
#etc
以下项目Makefile有什么问题:
PACKAGES = \
module1 \
module2 \
emodule3
VIRTUAL_PACKAGES = $(addsuffix /.virtual.Makefile,${PACKAGES})
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS): $(VIRTUAL_PACKAGES)
$(VIRTUAL_PACKAGES):
$(MAKE) $(FLAGS) -C $(@D) $(MAKECMDGOALS)
жҳҜзҡ„пјҢMakefileдёӯзҡ„$VIRTUAL_PACKAGESзңӢиө·жқҘеҫҲеҘҮжҖӘгҖӮж··еҗҲдҪҝз”ЁforеҫӘзҺҜзҡ„жӣҝд»Јж–№жі•еҸҜиғҪдјҡжӣҙз®ҖзҹӯпјҢдҪҶжҲ‘дёҚзЎ®е®ҡе®ғжҳҜеҗҰжӣҙеҘҪпјҲеӣ дёәжҲ‘йңҖиҰҒдҫқйқ bashпјүпјҡ PACKAGES = \ module1 \ module2 \ emodule3
TARGETS=clean install all
.PHONY: $(TARGETS)
default: all
FLAGS = $(ifeq $(MAKEFLAGS) "","",-$(MAKEFLAGS))
$(TARGETS):
for p in $(PACKAGES) ; do $(MAKE) $(FLAGS) -C $$p $@ || break; done
谢谢!
FLAGS
的赋值有效吗?你使用的是哪个版本的Make? - BetaFLAGS
赋值有效...为什么?2) Makefile 版本是 3.81。 - marcmagransdeabril