# 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)
time -v /usr/bin/c++ CMakeFiles/basic_ex.dir/main.cpp.o -o basic_ex
Command being timed: "/usr/bin/c++ CMakeFiles/basic_ex.dir/main.cpp.o -o basic_ex"
User time (seconds): 0.07
System time (seconds): 0.01
Percent of CPU this job got: 33%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.26
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 16920
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 6237
Voluntary context switches: 7
Involuntary context switches: 23
Swaps: 0
File system inputs: 0
File system outputs: 48
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
4条答案
按热度按时间envsm3lx1#
以下属性可用于计算编译器和链接器调用的时间:
这些属性可以全局设置,每个目录和每个目标。这样你就只能让你的目标的一个子集(比如测试)受到这个属性的影响。此外,你可以为每个目标设置不同的“启动器”,这也可能是有用的。
请记住,直接使用“time”是不可移植的,因为此实用程序并不适用于CMake支持的所有平台。但是,CMake在其命令行工具模式中提供了“time”功能。例如:
CMake输出示例:
注意,从CMake 3.4开始,只有Makefile和Ninja生成器支持这个属性。
还要注意,CMake 3.4
cmake -E time
在参数中有空格的问题。例如:将被解释为:
我提交的patch解决了这个问题。
jdgnovmf2#
我希望用'time original-cmd'替换编译器(和/或链接器)。使用普通的'make',我会说:
'time'程序将运行命令并报告所用的时间。等效的机制将与'cmake'一起工作。如果您需要捕获命令和时间,那么您可以编写自己的类似于time的命令(shell脚本可以),以您想要的方式记录数据。
dnph8jn43#
为了扩展前面的答案,这里有一个我刚刚写的具体解决方案-也就是说,它在实践中肯定有效,而不仅仅是在理论上,但它只被一个人使用了大约三分钟,所以它可能有一些错误。
我把上面两行放在
/tmp/time-clang
中,然后运行您可以使用
-DCMAKE_CXX_COMPILER=
以完全相同的方式挂钩C++编译器。make -j8
,因为我不希望结果以奇怪的方式交错。#!/bin/bash
,因为Ubuntu 12.04上的默认shell(我想是dash
吧?)对这些重定向操作符不满意。0vvn1miw4#
我认为最好的选择是用途:
尽管上面已经说过:
请记住,直接使用“time”是不可移植的,因为此实用程序并非在CMake支持的所有平台上都可用。但是,CMake提供了“time”... https://stackoverflow.com/a/34888291/5052296
如果你的系统包含它,你会得到更好的结果与
-v
标志。例如