軟體專案通常由許多程式碼檔案以及資源檔組成,C++ 專案透過編譯、連結產生各平台的可執行檔。多數專案需要使用到平台以及第三方函式庫(Library),再加上編譯、連結的參數眾多,為簡化繁瑣的流程,相應的工具應運而生。
古老但有用的 make,年輕一點的 CMake, Ninja 皆屬此類工具。我跟 make 不熟,對其印象為「彈性好,穩定性佳,做事又牢靠的老傢伙」。前陣子聽《Two's Complement》Podcast,有一集叫〈Boring is Awesome〉,花了不少時間談 make 這種古老又「無趣」的工具,放到科技發達的現在,不只跟新科技相處甚歡,好用程度甚至不亞於新工具。大推。
CMake 的作法與 make 不同,前者將 CMake 描述檔產生各個 IDE 的專案檔,由該些 IDE 編譯成可執行檔。常見的 IDE 有:
有趣的是,有些 IDE 反過來支援 CMake,如 Visual Studio 2019, CLion。這些 IDE 看得懂 CMake 描述檔(CMakeLists),然後產生相應的檔案用以建置專案。
JUCE 也有一個類似 CMake 角色的工具,稱為 Projucer。
Projucer 有自己的描述檔 .jucer,透過 Projucer 產生 IDE 專案檔後,再用各平台的 IDE 開啟以建置專案。Projucer 支援主流的 IDE,如 Visual Studio, Xcode, CodeBlocks。上圖可看到 Projucer 支援的完整 IDE 清單。
其中,CLion 標示為 Deprecated,原因是 JUCE 專案已經完整支援 CMake 建置,各個模組甚至 Examples 專案,都有相應的 CMakeLists。而 CLion 支援 CMake 專案,就這樣環環相扣,CLion 可以直接利用 CMake 編譯 JUCE。
JUCE 支援 CMake 後,更容易納入 vcpkg 生態圈。vcpkg 是微軟推的跨平台 Package Manager,角色與 npm,目標是簡化 C++ 專案相依模組的使用與管理。vcpkg 這題超出範圍,不在本系列細述。
JUCE CMake 化後,透過 CMake 即可產生多數 IDE 專案,弱化了 Projucer 產生 IDE 專案的需求,「拿掉 Projucer 中的專案產生功能,全面採用 CMake」的可能性,不再是零。(希望不要)