【发布时间】:2019-06-20 00:50:30
【问题描述】:
我正在寻找有助于使用 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
【问题讨论】:
-
在并行构建的情况下,所有输出行都是一团糟。您可以改为输出到某个文件中,但要确保对文件的每次写入都是原子的。 (据我记得,每次写入大小为 4096 或更小的都是原子的)。
标签: c++ linux makefile build cmake