介紹讓 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