gpt4 book ai didi

makefile - 强制 Makefile 中的依赖顺序

转载 作者:行者123 更新时间:2023-12-04 16:49:41 24 4
gpt4 key购买 nike

我有一个 Makefile,我想并行使用它来编译一组单独的程序。它看起来像这样:

compileall: program1 program2 program3
@echo "Compilation completed"

program1 program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@

我使用 gmake compileall -j3 调用它,一切正常。它作为我们测试脚本的一部分每天运行。

现在,我添加了一个新目标 program1a,它需要成为同一 make 目标的一部分,并且不能与 program1 同时执行目标。它发生在之前还是之后并不重要,只是不平行。

我知道我可以这样做:

compileall:
+$(MAKE) program1 program2 program3
+$(MAKE) program1a
@echo "Compilation completed"

program1 program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@

program1a:
@echo "Compiling $@"
$(MAKE) -C program1 A=true

有更好的方法吗?我希望不必等待 program2program3 完成才能开始 program1a 编译。

最佳答案

没有测试(告诉我这是否行不通),但你可以这样做:

compileall: program1 program2 program3
@echo "Compilation completed"

program1: program1a
@echo "Compiling $@"
$(MAKE) -C $@

program1a program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@

这样 program1a 应该在 program1 之前构建并且 make 应该能够构建 program2program3无论如何平行。


编辑:更干净一点(thx @Beta):

compileall: program1 program2 program3
@echo "Compilation completed"

program1: program1a

program1 program1a program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@

编辑 2:我想到的避免依赖的唯一解决方案如下。

像这样创建 2 个单独的 makefile:

# Makefile1.mk

.NOTPARALLEL: # Force disabling of -j flag

all: program1 program1a

program1 program1a:
@echo "Compiling $@"
$(MAKE) -C $@
# Makefile

all: program1 program1a program2 program3

program1 program1a:
$(MAKE) -f Makefile1.mk

program2 program3:
@echo "Compiling $@"
$(MAKE) -C $@

关于makefile - 强制 Makefile 中的依赖顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24529043/

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