在Visual Studio C ++中打印每个文件的编译时间

时间:2009-07-10 10:48:02

标签: visual-studio visual-studio-2005

如何创建一个表来获取visual studio 2005项目中每个c ++文件的编译时间。

3 个答案:

答案 0 :(得分:8)

我使用的是Visual Studio 2010,但其他版本的Visual Studio可能会有类似的东西。在VS2010中,您可以添加命令行选项/ Bt +,它打印编译每个文件所用的时间。所以在"配置属性"下的项目属性中; - > " C / C ++" - > "命令行" - > "其他选项"添加/ Bt +

设置/ Bt +选项会导致输出(记录在日志文件中)行如下所示:

time(c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c1.dll)=0.05110s < 25394686804 - 25394831194 > BB [C:\not-important\nlopt-2.4.2\direct\DIRect.c]

有关此选项的更多信息,请参阅 https://blogs.msdn.microsoft.com/vcblog/2010/04/01/vc-tip-get-detailed-build-throughput-diagnostics-using-msbuild-compiler-and-linker/ 我发现这要归功于这个答案https://stackoverflow.com/a/3513043/453436

根据您可以使用的工具,有很多方法可以提取时间线。我使用find,grep和perl的组合在bash shell下完成。以下将为您提供以最长的第一个排序的编译时间。

find . -name '*.log' | xargs grep time | perl -ne '$_ =~ /=(.*?)s.*\[(.*)\]/; print "$1 $2\n";' |sort -rn

答案 1 :(得分:4)

“工具” - &gt; “选项” - &gt; “项目和解决方案” - &gt; “VC ++项目设置”

勾选“构建时间”。

答案 2 :(得分:0)

我已经使用了那个版本的编译器已经有一段时间了,但是我记得它打印了它正在编译到控制台的文件的名称(当你使用命令行构建时)。如果是这种情况,那么您可以编写一个执行以下操作的程序:

  1. 命令行编译器上的CreateProcess,将stdout重定向到管道
  2. 从管道中读取,查找源文件名
  3. 每次看到源文件名时,请记下当前时间戳
  4. 当管道关闭时,打印出每个文件构建所花费的时间
  5. 虽然这种方法可以用C ++开发,但使用Perl等工具来实现它可能更容易。