首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ninja/cmake中操作独立目标的构建顺序

在ninja/cmake中操作独立目标的构建顺序
EN

Stack Overflow用户
提问于 2019-03-19 00:33:45
回答 1查看 282关注 0票数 11

我正在做一个用cmake+ninja构建的c++项目,在一台64线程的计算机上大约有1200个构建目标。

有一个翻译单元需要10分钟来编译,大多数其他翻译单元的编译速度都相当快,所有其他目标的构建(在所有线程上构建)只需要大约9分钟。慢翻译单元与其他的翻译单元是相当独立的,所以它不必被安排得很晚,但事实证明,默认情况下,它被安排在较晚的时间,这样一个完整的构建需要15到20分钟,最后只有一个线程处理几乎所有其他目标。如果首先安排慢翻译单元,阻塞一个线程大约10分钟,而所有其他线程在项目的其余部分工作,整个项目在10分钟内构建,那么构建对我来说会更快。

在cmake或ninja中,有没有一种方法可以改变调度的优先级,以便在不扰乱依赖关系的情况下指出缓慢或“请早”的目标?

EN

回答 1

Stack Overflow用户

发布于 2021-02-28 15:34:21

截至2021年2月27日,答案是no。有一些开放的问题(#232#376)和一个废弃的PR (#1333)在GitHub上请求这个功能在基地忍者。CMake也没有提供任何方法来确定目标的优先级(至少到3.20)。

在这里(正如你可能知道的),处理依赖项(甚至只处理订单)没有什么帮助,因为这只会迫使较小的目标完全在长目标之前或之后启动。这里真正需要的是优先级提示。

我能想到的唯一解决办法(这不是一个很好的办法)是将你的长目标分割成一个单独的ExternalProject,并创建一个超级构建,同时构建大目标和独立部分。这将需要重大的重组,而且对于许多项目来说都不是一个开始。但是,如果您在这个问题上损失了大量的开发时间,那么付出的代价可能是值得的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55225997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档