gpt4 book ai didi

makefile - 使用 make 将 'foreach' 转换为并行构建

转载 作者:行者123 更新时间:2023-12-04 18:08:18 25 4
gpt4 key购买 nike

我有以下 make 文件目标:

所有库:
$(foreach 模块, $(LIBMODULES), cd $(module) && $(MAKE) lib; )

尽管使用了 make -j,但一次执行一个。如果库只包含几个源文件,那么很多可用的 CPU 核心都没有得到充分利用。如何使它并行编译所有库?

我在答案部分尝试了 Tom Tanner 的建议,但没有用。 “cd”部分有问题。在 cd 命令之前添加 @echo $(LIBMODULES) 后,我得到以下输出:

15:25:15 **** Build of configuration Rev3 Debug for project p4080ds ****make -m all_libs /cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/source/utils /cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/source/dda /cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/source/mqtpcid_app /cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/source/mqtpcid_core /cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/source/mqtpcid_drv /cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/source/mqtpcid_libcd . && /cygdrive/d/Cook/OSE5.7_PPC/cygwin/bin/make libmake[1]: Entering directory `/cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/examples/p4080ds'make[1]: Leaving directory `/cygdrive/y/MCT_Comp/comp/tools/cdk/OSE/OSE5.7_PPC/examples/p4080ds'make[1]: *** No rule to make target `lib'.  Stop.make: *** [all_libs] Error 2

您可以看到 $(@D) 正在翻译为“.”而不是 $(LIBMODULES) 变量的当前元素。

更新:根据 make $(@D) 转换为:

‘$(@D)’The directory part of the file name of the target, with the trailing slash removed. If the value of ‘$@’ is dir/foo.o then ‘$(@D)’ is dir. This value is . if ‘$@’ does not contain a slash.

最佳答案

你试过吗?

$(LIBMODULES):
$(MAKE) -C $@ lib

-C 告诉 make 切换到目录。看起来 $LIBMODULES 已经是一个目录列表,因此您不需要使用 $(@D) 来获取目录名称。

关于makefile - 使用 make 将 'foreach' 转换为并行构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022071/

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