首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CMake中度量每个对象的编译时间?

如何在CMake中度量每个对象的编译时间?
EN

Stack Overflow用户
提问于 2019-01-26 19:24:51
回答 2查看 1.5K关注 0票数 3

我正在寻找使用CMake计算编译时间的工具。目标项目构建了很多文件,所以我需要为每个模块制作一些“表”。例如,项目由两个文件组成- main.cc和libs.cc,我需要以不同的方式计算libs和main的构建时间。

我试图为g++设置包装器,但在make -j4中它有一些“竞争条件”。具有Building status和building的字符串交叉。

代码语言:javascript
复制
.......
[  3%] Building CXX object irohad/simulator/CMakeFiles/block_creator_common.dir/block_creator_common.o
0.12    1.42
[  4%] Building CXX object schema/CMakeFiles/yac_grpc.dir/yac.grpc.pb.o
0.13    1.36
0.10    0.71
.......

为g++设置新的“编译器”-包装器

代码语言:javascript
复制
#!/bin/bash
{ /usr/bin/time -f "%S\t%U" g++ "$@"; } 2> >(cat <(echo "g++ $@") - | cat)

然后

代码语言:javascript
复制
cmake -H. -Bbuild -DCMAKE_CXX_COMPILER=/path/to/script.sh
make | tee -a buildResults.txt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-30 14:27:10

我的解决方案是:

代码语言:javascript
复制
#!/bin/bash
( /usr/bin/time -f "%S\t%U" g++ "$@" 2> >(cat <(echo "g++ $@") - )) | sponge

海绵允许仅在程序退出后才放入输出

票数 0
EN

Stack Overflow用户

发布于 2019-01-27 13:13:36

请尝试在cmake中添加以下行,以测量您可以使用单cpu编译然后在并行模式下运行的时间

代码语言:javascript
复制
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")

set_property(TARGET <your target> PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")

根据您的项目名称替换。

希望这能有所帮助。

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

https://stackoverflow.com/questions/54377926

复制
相关文章

相似问题

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