當嘗試對同一語言(例如C)使用多個編譯器時,CMake的預設行為提出了挑戰。此組態要求所有 C 原始檔使用單一 CMAKE_CXX_COMPILER,從而禁止單一 CMakeLists.txt 中的每個目標編譯器規格。這在結合主機和交叉編譯操作時造成了重大障礙。
重寫每個目標的編譯器
為了解決這個問題,有些人可能會本能地尋求一種方法來重寫基於每個目標的編譯器選擇。但是,CMake 不提供這種靈活性。它維護一組適用於 CMakeLists.txt 檔案中所有目標的編譯器屬性。
單命令困境
多次運行 CMake 的規定方法以適應不同的編譯器可能會破壞使用單一命令構建的理想場景。為了減輕這種不便,使用者可以訴諸自訂命令。然而,這種解決方案損害了建置過程的清晰度和可維護性,類似於美化的 shell 腳本。
單獨的 CMakeLists.txt:實用的解決方案
更優雅的解決方案在於避免在單一 CMakeLists.txt 中包含多個編譯器設定。鑑於不同體系結構之間不可能進行鏈接,因此沒有令人信服的理由讓它們共存於同一文件中。將常見的 CMake 腳本元素重構為可重複使用的單獨檔案可以實現更好的程式碼組織。
這種方法的缺點是失去單一命令建置功能。這種不便可以透過建立一個包裝腳本來協調多個 CMake-makefile 的執行來解決。雖然它可能會破壞單一建置命令的明顯簡單性,但它最終會促進更清晰的關注點分離和更好的程式碼管理。
以上是## CMake 可以在單一 CMakeLists.txt 中處理相同語言的多個編譯器嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!