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

How to measure compile time per object in CMake?

本文关键字:对象 编译 时间 测量 CMake      更新时间:2023-10-16

我正在寻找有助于使用 CMake 计算编译时间的工具。目标项目构建了很多文件,所以我需要为每个模块制作一些"表"。例如,项目由 2 个文件 - main.cc 和 libs.cc 我需要以不同的方式计算库和 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 "%St%U" g++ "$@"; } 2> >(cat <(echo "g++ $@") - | cat)

然后

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

请尝试在 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")

根据您的项目名称进行替换。

希望这有帮助。

你可以试试这个

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

我的解决方案是:

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

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