2017-06-29 17 views
2

我試圖計算我的代碼庫中每個文件需要多長時間才能編譯的時間。將時間輸出和它計時的命令寫成一行

this SO answer,你可以寫一個腳本,做次實際編譯,然後存儲在一個文件中

/tmp/time-build結果:

#!/bin/bash 
{ time g++ "[email protected]"; } 2> >(cat <(echo "g++ [email protected]") - >> /tmp/results.txt) 

然後,您可以覆蓋CMAKE_CXX_COMPILER調用cmake的時以便使用該腳本來執行彙編

cmake .. -DCMAKE_CXX_COMPILER=/tmp/time-build 
make 

這像宣傳的那樣,和產生的結果類似以下內容:

real 0m1.190s 
user 0m1.044s 
sys  0m0.140s 
g++ -Werror -Wall -Wextra ... /src/test/foo.cpp 

然而,爲緩解加工,我想只存儲real時間,並將其上的G ++同一行命令。

問:

我的命令行拂達不到把這個任務:

{ time g++ "[email protected]"; } 2> >(cat <(echo "g++ [email protected]") - >> /tmp/results.txt) 

進入僅僅捕捉時間的real輸出,包括它沿着命令一條線上的echo "g++ [email protected]"

我不知道是什麼>(cat <() -份上述命令的意思的,我嘗試結合了grep realecho失敗

我怎麼能這樣做?或者,如果有更習慣性的方法讓cmake獲得每個處理文件的輸出時間,那也是理想的選擇。

+1

添加一點'sed'欺騙內聯? –

+0

@πάνταῥεῖ你能推薦一些嗎? –

+0

嗯,我的sed fu現在有點生疏了;-)。你有沒有發現[相關](https://stackoverflow.com/questions/5962285/cmake-compilation-statistics)問題? –

回答

3

爲基於CMake的項目獲得編譯時間的最好方法是使用ninja而不是make

要做到這一點,你必須指定忍者發電機,同時配置:

cmake -G Ninja <...> 

然後建立使用忍者:

ninja 

之後,看看所謂.ninja_log文件。第一列是以毫秒爲單位的開始時間,第二列是結束時間,第四列是目標名稱,最後一列是所用命令行的哈希。

甚至有一些解決方案可用於查看和分析此日誌:ninjatracing.ninja_log轉換爲Chrome的跟蹤工具可讀的格式。

+0

謝謝,會檢查出來! –

1
cmd=(clang "[email protected]") 
{ time "${cmd[@]}"; } 2> >(tee >(real=$(grep -Po 'real\K.*'); echo "${cmd[*]} $real" >>result.txt)) 
相關問題