我需要找出哪些翻译单元需要重新编译以提高编译时间,我如何使用cmake为我的翻译单元获得编译时间?cmake:编译统计
回答
我希望用'time original-cmd'代替编译器(和/或连接器)。使用简单的'make',我会说:
make CC="time gcc"
'时间'程序将运行命令并报告所花费的时间。等效机制将与'cmake'一起工作。如果你需要捕获命令和时间,那么你可以编写你自己的类似于时间的命令(一个shell脚本会这样做),以你想要的方式记录你想要的数据。
通常'时间'是内置命令。要使用详细模式,需要键入'make CC =“/ usr/bin/time -v gcc”'命令。 – Orient 2015-12-07 11:49:32
您不能通过编译器以这种方式为CMake生成的make文件传递编译器。通常它不起作用。 – usr1234567 2017-06-29 14:54:33
要在以前的答案扩大,这里就是我刚写了一个具体的解决方案 - 这是说,在实践中肯定工程,不仅在理论上,而且大约三分钟已经使用仅由一人,所以它可能有一些不足之处。
#!/bin/bash
{ time clang "[email protected]"; } 2> >(cat <(echo "clang [email protected]") - >> /tmp/results.txt)
我把/tmp/time-clang
上述两行,然后跑
chmod +x /tmp/time-clang
cmake .. -DCMAKE_C_COMPILER=/tmp/time-clang
make
您可以使用-DCMAKE_CXX_COMPILER=
挂钩C++编译器在完全相同的方式。
我没有使用
make -j8
,因为我不想要的结果,以怪异的方式获得交错。我不得不在我的脚本上放置一个明确的hashbang
#!/bin/bash
,因为Ubuntu 12.04上的默认shell(dash
,我想?)对这些重定向操作符不满意。
这对我很好,谢谢!然而,我试图(并且挣扎)只从'time'中提取'real'输出,并将它和clang命令*一起打印到* results.txt中? – 2017-06-28 22:13:33
以下属性可以用来实时编译器和链接器调用:
,这些属性可以全局设置,每个目录和每个目标。这样你就只能有一部分目标(比如测试)受到这个属性的影响。你也可以为每个目标有不同的“发射器”,这也可能是有用的。
请记住,在使用“时间”并不能直接移植,因为这个实用程序不可由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的仅生成文件和忍发电机支持此性质。
还要注意,因为CMake的3.4 cmake -E time
的具有内部参数的空间问题。例如:
cmake -E time cmake "-GUnix" "Makefiles"
我提交patch修复此问题:
cmake -E time cmake "-GUnix Makefiles"
会被解释。
- 1. cmake交叉编译
- 2. g ++编译失败,Cmake不编译
- 3. CMake CMAKE_AUTOMOC交叉编译
- 4. CMake的失败编译
- 5. 使用cmake编译CSDP
- 6. Cmake编译器问题
- 7. cmake的编译错误
- 8. 用CMake和minGW编译OpenCV
- 9. 没有cmake的编译源
- 10. CMake,选择Xcode编译器
- 11. CMake的不编译什么
- 12. cmake和默认编译器
- 13. CMake包括预编译库
- 14. 如何让CMake在系统PATH上使用默认编译器?
- 15. 一种编译uCLinux操作系统musescore与QT和cmake的
- 16. Cmake统计文件中字的出现
- 17. 使用CLion,CMake和VS2017编译器编译C++ 17
- 18. 使用CMAKE编译CUDA C++ - 指定了多个编译阶段
- 19. cmake-查找未编译的库
- 20. CMake不能在树莓编译
- 21. CMake的错误的libwww编译Ryzom
- 22. 如何编译openvdb和链接cmake
- 23. 错误与CMAKE和手动编译QT4
- 24. C编译器破解与cmake
- 25. Cmake使用编译的OpenCV版本
- 26. 如何使用CMake 2.8编译Allegro 4.9.14
- 27. 在cmake中使用nvcc编译.cu
- 28. CMake:编译OpenCV时未找到CUDA库
- 29. 如何前缀CMake编译器?
- 30. 使用CMake在OpenCV-2.4.3中编译
正如我一直认为'cmake'只为本机构建系统(make,nmake等)生成conf文件。所以cmake实际上并没有涉及编译/链接过程。也许你应该在你的本地构建系统中寻找这样的选项。 – beduin 2011-05-11 11:06:37
这是一个相当常见的用例。但是,如果你知道如何为标准的linux制作,那将是最有帮助的。 – 2011-05-11 12:24:07
不幸的是,我不知道有任何制作选项可以实现这一点。我想到的第一个解决方案是修改'Makefiles'来为每个'gcc'命令调用'time'。 – beduin 2011-05-11 13:18:12