在Windows上进行(并行作业)

Oli*_*ver 17 build-process makefile gnu-make

什么设置适用于GNU在Windows上进行并行作业(-j)?

我已经尝试使用MinGW make 3.81将shell设置为cmd.exe,这适用于创建多个进程但是使用"等待作业"消息失败.

这可以工作,什么是最好的设置?(MinGW/Cygwin/???)有人能指出一个可以测试的工作示例吗?

Joa*_*him 5

可能对 CMake 用户有帮助的提示

当 makefile 像 cmake-makefiles 通常那样递归调用 make 时,-jN 选项不起作用。但是有一个补救措施可以再次起作用,因为在生成的 makefile 中,CMake 通过这样的语法进行调用。

$(MAKE) -f CMakeFiles\Makefile2 <subproject>
Run Code Online (Sandbox Code Playgroud)

这意味着您可以修改变量 MAKE:

mingw32-make "MAKE=mingw32-make -j3"
Run Code Online (Sandbox Code Playgroud)

现在,每次启动 subproject-make 时,它​​都会再次获得“-j3”选项。但请注意,这实际上不会将并行编译的数量限制为 3,正如您所期望的那样。如果您有 3 个以上的项目,并且在同一层次结构上彼此不依赖,则所有 3 个项目将并行构建,并且每个项目都会启动 3 个编译步骤。导致 9 个并行编译步骤。

当我们再次仔细查看由 cmake 生成的顶部 Makefile 时,我们会发现目标“all”本质上只启动一个子 make。

$(MAKE) -f CMakeFiles\Makefile2 all
Run Code Online (Sandbox Code Playgroud)

因此我们可以通过调用删除一层子项目并行性

mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all
Run Code Online (Sandbox Code Playgroud)

但这牺牲了进度报告。

尽管如此,我希望这会有所帮助。


bob*_*ogo 2

我在 Cygwin 下使用从来没有遇到过任何问题make -jn。它运作得相当好。我经常将它与微软的cl.exe编译器一起使用。它对我来说开箱即用。非常像 UNIX,这是一件好事™。构建可以很好地移植到 Linux 和 Mac 的脚本。彻底推荐。

自从我遇到 5 个反斜杠太少,但 6 个反斜杠又太多的地方以来,我一直不喜欢 MinGW make。叹!(与 MinGW hacks 一起使用 make AFAIK 中允许反斜杠分隔的路径名。)