won*_*ice 24
以下属性可用于计算编译器和链接器调用的时间:
可以全局,按目录和每个目标设置这些属性.这样,您只能让目标的一部分(比如测试)受到此属性的影响.此外,您可以为每个目标使用不同的"发射器",它们也很有用.
请记住,直接使用"time"是不可移植的,因为CMake支持的所有平台都不提供此实用程序.但是,CMake在其命令行工具模式下提供"时间"功能.例如:
# 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")
Run Code Online (Sandbox Code Playgroud)
示例CMake输出:
[ 65%] Built target my_target
[ 67%] Linking C executable my_target
Elapsed time: 0 s. (time), 0.000672 s. (clock)
Run Code Online (Sandbox Code Playgroud)
请注意,从CMake 3.4开始,只有Makefile和Ninja生成器支持此属性.
另请注意,从CMake 3.4 cmake -E time开始,参数中的空格存在问题.例如:
cmake -E time cmake "-GUnix Makefiles"
Run Code Online (Sandbox Code Playgroud)
将被解释为:
cmake -E time cmake "-GUnix" "Makefiles"
Run Code Online (Sandbox Code Playgroud)
我提交了补丁修复了这个问题.
Jon*_*ler 10
我希望用'time original-cmd'替换编译器(和/或链接器).使用简单的'make',我会说:
make CC="time gcc"
Run Code Online (Sandbox Code Playgroud)
'时间'程序将运行命令并报告所花费的时间.等效机制适用于'cmake'.如果您需要捕获命令以及时间,那么您可以编写自己的命令,类似于时间(shell脚本会这样做),以您想要的方式记录您想要的数据.
为了扩展之前的答案,这是我刚刚写的一个具体解决方案 - 也就是说,它在实践中确实有效,不仅仅是理论上,但它仅被一个人使用了大约三分钟,所以它可能有一些不妥之处。
#!/bin/bash
{ time clang "$@"; } 2> >(cat <(echo "clang $@") - >> /tmp/results.txt)
Run Code Online (Sandbox Code Playgroud)
我把上面两行放进去/tmp/time-clang然后跑
chmod +x /tmp/time-clang
cmake .. -DCMAKE_C_COMPILER=/tmp/time-clang
make
Run Code Online (Sandbox Code Playgroud)
您可以使用-DCMAKE_CXX_COMPILER=完全相同的方式来挂钩 C++ 编译器。
我没有使用,make -j8因为我不希望结果以奇怪的方式交错。
我不得不#!/bin/bash在我的脚本上放置一个显式的 hashbang ,因为dashUbuntu 12.04 上的默认 shell(我认为?)对这些重定向运算符不满意。
| 归档时间: |
|
| 查看次数: |
5580 次 |
| 最近记录: |