簡體   English   中英

CMake 將警告視為錯誤

[英]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。 也就是說,它不應該默認開啟。

有很多很好的設置方法:

  1. 您可以將其添加到預設cacheVariables部分
  2. 您可以在工具鏈文件中將其setON
  3. 當您想要打開或關閉它時,您可以簡單地在命令行中傳遞它。

作為經常使用樹頂編譯器構建的人來說,警告經常中斷,硬編碼的警告作為錯誤是一個問題。 它迫使我和無數其他 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM