[英]CMake Treat Warnings as Errors
如何配置 CMake 以在構建期間將編譯器警告視為錯誤?
我知道可以通過諸如target_compile_options
之類的命令為編譯器手動配置命令行選項(例如-Werror
),但我更喜歡不需要擺弄與工具相關的選項的可移植解決方案。
對於具有固定且可預測的工具鏈的 CI 系統而言,將警告視為錯誤是一種很好的做法,但對所有用戶強加是不合適的。 許多人可能正在使用具有不同警告集和對這些警告敏感度的不同工具鏈。 默認情況下啟用-Werror
會導致消費者的構建損壞,這是一種不好的做法。
Notably, this exact issue was the source of one major debacle in the last year in the Linux kernel: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/? id=b339ec9c229aaf399296a120d7be0e34fbc355ca
Gentoo 打包檔案也禁止它(很重要,因為它是基於源的發行版): https://devmanual.gentoo.org/ebuild-writing/common-mistakes/index.html
做更多的搜索,你會聽到山頂上的喊叫,警告錯誤對開發人員有好處,但對消費者不利。
因此,最好的方法是將新的(從 CMake 3.24 開始)變量CMAKE_COMPILE_WARNING_AS_ERROR
設置為ON
,僅當您知道這樣做是安全的時才設置為 ON。 也就是說,它不應該默認開啟。
有很多很好的設置方法:
作為經常使用樹頂編譯器構建的人來說,警告經常中斷,硬編碼的警告作為錯誤是一個問題。 它迫使我和無數其他 package 維護人員、devops 團隊等修補您的構建。
這可以通過COMPILE_WARNING_AS_ERROR
目標屬性在 CMake 版本 3.24 及更高版本中進行配置。
例如,要將警告作為my_app
目標的錯誤啟用,您可以編寫:
set_property(TARGET my_app PROPERTY COMPILE_WARNING_AS_ERROR ON)
您還可以通過CMAKE_COMPILE_WARNING_AS_ERROR
變量為項目中的所有目標設置全局默認值:
set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
add_executable(my_app1 [...])
add_executable(my_app2 [...])
add_executable(my_app3 [...])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.