< > 翻譯 1. CMake 介紹


<<Modern CMake>> 翻譯 1. CMake 介紹

人們喜歡討厭構建系統。 僅僅觀看 CppCon17 上的演講,就可以看到開發人員因為構建系統而鬧笑話的例子。 這讓我們思考一個問題:為什么會這樣? 構建系統時當然不可能完美無缺。 但我認為,在 2018 年,我們可以很好地解決其中的一些問題。 這就是 CMake。不過 CMake 2.8 可能不行; 它在 C++11 發布之前就 release 了! 對於 CMake 來說也沒有可怕的例子(甚至那些發布在 KitWare 自己的教程列表中的例子)。 我們來談論現代 CMake。CMake 3.1+,甚至可能是 CMake 3.15+! 它整潔,強大,優雅,因此你可以將大部分時間花在編碼上,而不是編寫不可讀,不可維護的 Make(或CMake 2)文件。 當然,CMake 3.11+ 運行起來也應該明顯更快!

 

 

這本書作為在線文檔發布。你可以在 GitLab 上提出問題或提交合並請求。 你也可以 從這里下載 PDF.

 

簡而言之,如果你在考慮使用現代 CMake,這些可能是你最關心的問題:

為什么我需要一個好的構建系統?

下面哪幾點適合你?

  • 你希望避免硬編碼路徑
  • 你需要在多台計算機上構建軟件
  • 你想使用CI(持續集成)
  • 你需要支持不同的操作系統(雖然可能只是 Unix 的風格)
  • 你想支持多個編譯器
  • 你想使用 IDE,但有時也不用
  • 你想要描述程序的邏輯結構,而不是標志和命令
  • 你想使用第三方軟件包
  • 你想使用像 Clang-Tidy 這樣的工具來幫助你編寫代碼
  • 你想使用調試器 (debugger)

如果是這樣,你將受益於類似 CMake 的構建系統。

為什么我們選擇 CMake?

構建系統是一個熱門話題。 當然大家有很多選擇。但即使是非常好的,或者重用一個熟悉的語法,也無法和 CMake 相提並論。 為什么?生態支持。 每個 IDE 都支持 CMake(或 CMake 支持這些 IDE)。 有更多的軟件包在使用 CMake 而不是其他構建系統。 因此,如果你在使用一個軟件包,它被設計為包含在你的代碼中,你可以選擇:創建自己的構建系統,或使用一個它支持的構建系統:這些軟件包幾乎總是支持 CMake。 如果你要使用多個軟件包,CMake 將很快成為共同點。 而且,如果你需要一個預安裝軟件包,那么它有 CMake 查找或配置腳本的可能性非常高。

為什么要用現代 CMake?

大約 CMake 2.6-2.8 的時候,CMake 開始流行起來。出現在了大多數 Linux 操作系統的軟件包管理器列表中,並且被用於許多軟件包使用。 然后 Python 3 問世了。 我知道,這與 CMake 沒有任何關系。 但它是第三版。 它前面有一個第二版: 這是一個艱難,丑陋的過渡,即使在今天,一些軟件仍然還在使用第二版。

我相信 CMake 3 運氣不會比 Python 3 好到哪兒去。1 盡管每個版本的 CMake 都是努力向后兼容,但 CMake 3 系列任然被視為新東西。 因此,你會發現操作系統,像 CentOS 7,已經擁有 GCC 4.8,幾乎完全支持 C++ 14,還在使用在 C++ 11 之前就推出的 CMake 2.8。

你真的至少應該使用編譯器發布之后出現的 CMake 版本,因為構建系統需要知道新版本編譯器的編譯標志等信息。 而且,由於 CMake 會將自己退化為 CMake 文件中指示的所需的最低版本,因此,即使你在系統范圍內安裝一個新的 CMake,也是非常安全的。 或者你至少應該在本地安裝它。 這很容易 (大多數情況下也就一兩行代碼的事兒), 你會發現 5 分鍾的工作將為你節省數百行和幾小時的 CMakeLists.txt 編寫時間,並且從長遠來看將更容易維護。 本書試圖解決那些網絡上隨處可見的糟糕問題和例子,以及提出最佳實踐的方法。

其他資源

在網上還有一些其他地方可以找到有用的信息。下面是其中的一些:

  • The official help: 真的很棒的文檔。組織精良,搜索便捷,還可以在頂部切換版本。它只是沒有一本偉大的“最佳實踐教程”,這本書就在試圖填補這個空白
  • Effective Modern CMake: 一個非常好的使用指導原則清單
  • Embracing Modern CMake: 一個對該術語有很好描述的帖子
  • It's time to do CMake Right: 現代 CMake 項目的一個很好的最佳實踐
  • The Ultimate Guide to Modern CMake: 具有類似意圖的略微過時的帖子
  • More Modern CMake: 來自 Meeting C++ 2018 推薦的 CMake 3.12+ 精彩演示。這個講話使得 CMake 3.0+ 現代化的 CMake 和 CMake 3.12+ 更現代化的 CMake 成為了一種話題
  • toeb/moderncmake: 關於 CMake 3.5+ 的一個很好的演示和示例,通過項目組織介紹語法

鳴謝

現代 CMake 最初由 Henry Schreiner 編寫。其他貢獻者信息可以 GitLab 項目貢獻者列表 中找到。

本書中文版由 南大通用 工程師 何江 在業余時間翻譯。

1. CMake 3.0 還從非常舊版本的 CMake 中刪除了幾個長期棄用的功能,並對與方括號相關的語法做了一個非常微小的向后不兼容的更改,所以這不完全公平; 可能會有一些非常非常古老的 CMake 文件在 CMake 3+ 中不能運行;雖然我從來沒有見過。  ↩


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM