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使用的默认线程数可能不是最优的
  • 我预计,输出将以不合理的方式交错
EDIT我也可以将
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创建),用于架构/调试、发布/等的组合。