c++ - cmake:编译统计

标签 c++ compilation cmake build-tools

我需要弄清楚哪些翻译单元需要重组以缩短编译时间,我如何使用 cmake 为我的翻译单元掌握编译时间?

最佳答案

以下属性可用于计时编译器和链接器调用:

这些属性可以全局设置,每个目录和每个目标。这样,您只能有一部分目标(例如测试)受到此属性的影响。您还可以为每个目标设置不同的“启动器”,这也很有用。

请记住,直接使用“时间”是不可移植的,因为此实用程序并非在 CMake 支持的所有平台上都可用。但是,CMake 在其 command-line tool mode 中提供了“时间”功能。 .例如:

# Set global property (all targets are impacted)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")
# Set property for my_target only
set_property(TARGET my_target PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")

CMake 输出示例:

[ 65%] Built target my_target
[ 67%] Linking C executable my_target
Elapsed time: 0 s. (time), 0.000672 s. (clock)

请注意,从 CMake 3.4 开始,只有 Makefile 和 Ninja 生成器支持此属性。

另请注意,从 CMake 3.4 开始,cmake -E time 参数内部存在空格问题。例如:

cmake -E time cmake "-GUnix Makefiles"

将被解释为:

cmake -E time cmake "-GUnix" "Makefiles"

我提交了 patch解决了这个问题。

关于c++ - cmake:编译统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5962285/

相关文章:

C# 数组索引类型检查

cmake - 如何将 ${CMAKE_CURRENT_SOURCE_DIR} 添加到变量中的所有文件之前?

cmake - 如何忽略 CMakeLists.txt 中单个 CMake 命令的错误?

c++ - CMake 链接顺序和 LINK_INTERFACE_MULTIPLICITY

c++ - 警告 C4316 : object allocated on the heap may not be aligned 16

c++ - lambda 函数的 setter ?

来自不同源文件的c++命名空间

编译和链接许多 .c 源程序使用的 .h 头文件

java - Maven 编译会在目标中生成同一类的多个版本吗?

c++ - 有没有办法在 C++11 中使用条件进行构造函数委托(delegate)?