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

时间:2019-01-26 11:24:51

标签: c++ linux makefile build cmake

我正在寻找一种工具,该工具可帮助使用CMake计算编译时间。 目标项目会生成许多文件,因此我需要为每个模块制作一些“表”。例如,项目包含2个文件-main.cc和libs.cc,我需要以不同的方式计算libs和main的构建时间。

我正在尝试为g ++设置包装器,但是在make -j4中有一些“竞赛条件”。具有建筑物状态和建筑物时间的字符串正在交叉。

.......
[  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 ++的包装器

#!/bin/bash
{ /usr/bin/time -f "%S\t%U" g++ "$@"; } 2> >(cat <(echo "g++ $@") - | cat)

然后

cmake -H. -Bbuild -DCMAKE_CXX_COMPILER=/path/to/script.sh
make | tee -a buildResults.txt


2 个答案:

答案 0 :(得分:0)

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

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")

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

替换为您的项目名称。

希望这会有所帮助。

答案 1 :(得分:0)

我的解决方法是:

#!/bin/bash
( /usr/bin/time -f "%S\t%U" g++ "$@" 2> >(cat <(echo "g++ $@") - )) | sponge

海绵只允许在程序退出后放置输出