C++ `ninja`有多个'build.ninja'文件?
我想同时启动多个C++ `ninja`有多个'build.ninja'文件?,c++,build,cmake,ninja,C++,Build,Cmake,Ninja,我想同时启动多个ninja版本。每个构建都在自己的目录中,并有自己的build.ninja文件 我可以做到以下几点: cd <build-dir-1> ninja & cd <build-dir-2> ninja & ... cd <build-dir-last> ninja cd 忍者& 光盘 忍者& ... 光盘 忍者 ……但这其中有几个问题: 当同时启动多个独立构建时,Ninja使用的默认线程数可能不是最优的 我预计,输出将以不合理
ninja
版本。每个构建都在自己的目录中,并有自己的build.ninja
文件
我可以做到以下几点:
cd <build-dir-1>
ninja &
cd <build-dir-2>
ninja &
...
cd <build-dir-last>
ninja
cd
忍者&
光盘
忍者&
...
光盘
忍者
……但这其中有几个问题:
- 当同时启动多个独立构建时,Ninja使用的默认线程数可能不是最优的
- 我预计,输出将以不合理的方式交错
ninja
调用放在前台(这就是我目前正在做的),但这样一来,就没有简单的方法来估计(整个)构建的当前进度了
因此,我想做以下工作之一:
cd <build-dir-1>
ninja &
cd <build-dir-2>
ninja &
...
cd <build-dir-last>
ninja
build.ninja
文件合并成一个可以执行以下操作的大文件
两者都在一个ninja
调用中构建build.ninja
脚本的ninja
ninja
支持,但第一个选项似乎可以使用subnija/build.ninja
轻松完成。以前有人做过这样的事吗?有什么隐藏的陷阱吗?或者,我可以按顺序执行构建(即,上面的顺序,但没有&
s),但这不是正确的解决方案
用例
我正在使用
CMake
,它为每个构建配置(发布和调试)生成一个单独的build.ninja
文件。我还针对多个平台,所以我有多个编译器,CMake必须为每个平台分别运行。因此,如果我想为所有平台构建发布和调试代码,我需要多次运行ninja
。为什么不按顺序构建发布和调试版本以及多个平台,每个平台都有最佳线程数cd&&ninja&&cd&&ninja&&cd[…]
@Antonio这就是我目前正在做的事情,但我希望有更好的方法。你是说涉及大量文件的构建吗?在这种情况下,我很难看到好处。您是否必须在每次文件修改时触发所有这些生成(因此在几个文件上触发生成),或者很少需要完整的生成集?使用GNU Parallel来并行生成它们:find-深度1-类型d-print0 | parallel-0cd{}&&“ninja
想象一下,你做了一个完整的构建,然后做了一个源代码更改,这意味着每个ninja构建都需要构建,比如说,三个文件。没有最佳线程数,因为每个单独的忍者运行只能同时运行三个编译。一个顶级忍者版本可以并行运行更多。在我们的例子中,我们有许多忍者目录(由cmake创建),用于架构/调试、发布/等的组合。