如何在 CMake 中测量每个对象的编译时间
How to measure compile time per object in CMake?
我正在寻找有助于使用 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
海绵允许仅在程序退出后放置输出
相关文章:
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 如何制作一个作为类对象并具有编译时大小的数组?
- 由于缺少类模板,NVCC 编译面向对象代码时出现问题
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 仅为从某种语言编译的对象添加链接库?
- 确保在编译期间仅同时使用来自同一工厂的对象
- 编译错误:临时对象构造函数中缺少参数
- 将 std::variant 与 gmock 1.8 对象一起使用时编译错误
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 混合单独编译的对象
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 编译问题 C++ 同时,尝试通过调用另一个对象中的成员函数来创建 std:: 线程
- 初始化不可移动对象数组:为什么这样的代码无法在 GCC 上编译?
- C++对象文件和程序文件组合编译的 Bashrc 别名
- 将TopoDS_Face对象分配给其子对象编译没有错误,但我有 3 个 valgrind 错误
- 是否为每个C++对象编译了多个成员函数?
- c++LogFile对象编译错误
- 为派生类的每个对象编译的vftable