介紹讓 CMake 在編譯程式時輸出詳細資訊的三種方法,方便監控編譯過程與除錯。
CMake 是一個跨平台的自動化建構系統,如果想讓 CMake 在編譯程式的時候,輸出詳細的資訊,可以採用以下任一種方式。
CMakeLists.txt 設定檔
在專案的 CMakeLists.txt 設定檔中將 CMAKE_VERBOSE_MAKEFILE 設定為 ON,即可讓專案在編譯的時候顯示較為詳細的資訊,包含實際執行的編譯指令以及參數。
# 輸出詳細資訊 set(CMAKE_VERBOSE_MAKEFILE ON)
這樣的設定只會對該 CMakeLists.txt 產生作用,並不會影響到透過 add_subdirectory() 加入的 CMakeLists.txt,如果希望讓每一個 CMakeLists.txt 都可以輸出詳細的資訊,就必須將 CMAKE_VERBOSE_MAKEFILE 設定寫在每一個 CMakeLists.txt 之中。
設定加上 -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
如果不想更改專案的原始檔案,也可以在執行 cmake 的時候,在參數中自行啟用 CMAKE_VERBOSE_MAKEFILE:
# 輸出詳細資訊 cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON PROJECT_FOLDER
這樣就會讓產生的每一個 Makefile 都自動輸出詳細資訊。
指令加上 VERBOSE=1
我們也可以在最後執行 make 指令時,加上 VERBOSE=1,讓 make 輸出詳細的資訊:
cmake PROJECT_FOLDER # 輸出詳細資訊 make VERBOSE=1
這種方式會讓 make 輸出所有的詳細資訊,缺點就是資訊可能會過多。
在設定了
CMAKE_VERBOSE_MAKEFILE 之後,不能以 VERBOSE=0 的方式關閉詳細訊息的輸出,若要關閉 CMAKE_VERBOSE_MAKEFILE,就要重新執行 CMake 將 CMAKE_VERBOSE_MAKEFILE 設定為 OFF 才可以將其關閉。參考資料:Bytefreaks.net

