CLion 中的 Makefile 項目:現已公開!

CLion 2020.2 EAP2 帶來了期待已久的 Makefile 項目支持。儘管它仍在初期階段,具備各類侷限性和已知問題,但足以應付大量項目。web




您有 Makefile 項目嗎?查看原文獲取免費的 EAP 版本並當即嘗試。與咱們分享您的反饋!在文章中,咱們將回答:算法


☞後臺工做原理是什麼?編程


☞如何在 CLion 中開始使用 Makefile 項目?json


☞若是出現問題而項目沒法正確加載,該怎麼辦?微信


☞有哪些已知問題和侷限性?app


咱們的實現方法編輯器


不久前,咱們介紹了咱們的發現以及在 CLion 中支持 Makefile 項目的方法。在那篇博客中,咱們概述了各類現代 C++ IDE 和編輯器首選處理 Makefile 的方法:工具


①編譯包裝器用於包裝實際的編譯器調用,而後執行完整的構建並提取項目信息。post


②在執行任何構建過程以前,將使用 LD_PRELOAD 環境變量並加載特定的動態庫,以攔截編譯器調用並收集項目信息。單元測試


③解析 make 命令的輸出,一般與 --just-print 選項一塊兒使用以免實際構建。


第三個選項提供了幾個很是重要的好處:


☞它不會影響構建過程。


☞與完整的項目構建相比,它使咱們能夠更快地收集信息。


☞這將是一個「便攜式」選項,由於 IDE 理論上能夠從記錄在另外一臺計算機上的 Make 輸出開始。


所以,咱們採用了第三種方法並實現了原型設計。咱們已經與一系列項目中進行了測試,您能夠在咱們的 Confluence 頁面上找到項目列表。咱們但願它也能與其餘各類項目應用。如今輪到您嘗試一下使用您的 Makefile 項目並與咱們分享反饋!


如何在 CLion 中開始使用 Makefile 項目


要在 CLion 中打開 Makefile 項目:


①在項目中選擇文件 | 打開(File | Open)。


②您能夠將文件夾做爲項目打開,CLion 將搜索頂級 Makefile(以及 CMakeList.txt 或 compile_commands.json 文件)並建議將其做爲項目打開。或者在 Open 對話框中直接將 CLion 指向 Makefile。


③CLion 可能會要求您清理項目。這是必需的,由於 Make 構建是增量的,在未清理的項目上運行時,只會編譯更新的文件,所以從新加載項目將沒法正常進行並會丟失全部未更改的文件。


④CLion 如今將嘗試加載項目。


⑤成功加載項目後,您能夠在 CLion 中開始使用它,並從其提供的全部智能 IDE 功能中受益。



若是默認設置不適合您,您能夠調整一些重要設置。


轉到設置/偏好 | 構建、執行、部署 | Makefile 設置 ( Settings/Preferences | Build, Execution, Deployment | Makefile settings):



在這裏您能夠更改:


①用於加載 Makefile 項目的工具鏈。支持全部本地工具鏈(Clang、GCC、MinGW、Cygwin、WSL)。Visual Studio 工具鏈依賴於 NMake,當前不支持該工具,可是若是您使用 GNU Make 構建項目,將能夠在 CLion 中使用。遠程模式還沒有包括在內。


②用於在 CLion 中調用 make 命令以提取項目信息的參數。


③在 CLion 中與 make 命令一塊兒使用 Build 和 Clean Make 目標以提取項目信息。對於 Build,空字段表示 CLion 將採用項目的 Makefile 中指定的第一個目標。


如下是在 CLion 中使用 Makefile 項目的一些最終技巧:提示 1:CLion 在您的 Makefile 項目中搜索目標,以便您能夠當即在運行/調試配置中開始使用它們:



而且若是CLion沒法找到您的 Make 目標,則能夠建立 Make 類型的自定義構建目標並在配置中使用它:



提示 2:支持源外版本,但您可能須要在項目加載後調用工具| Makefile |更改項目根目錄 (Tools | Makefile | Change Project Root),以在項目視圖中更好地顯示您的源。


提示 3:目前,CLion 不會在文件更改(例如添加新文件)時自動更新或從新加載項目。



更新後,Makefile 上的通知將出現,這樣您就不會忘記從新加載項目。可是,若是您的項目使用了配置步驟,請不要忘記先調用它以更新 Makefile 並獲取通知。


若是出現問題而項目沒法正確加載,該怎麼辦?


咱們已經與一系列項目中進行了測試,您能夠在咱們的 Confluence 頁面上找到項目列表。咱們但願它在包括您在內的許多其餘項目應用。可是,若是遇到任何問題,請採起如下行動:


①在設置/偏好 | 構建、執行、部署 | Makefile 設置( Settings/Preferences | Build, Execution, Deployment | Makefile settings)

中檢查您正在使用的工具鏈:您應該可以在所選環境中構建項目。


②在設置/偏好 | 構建、執行、部署 | Makefile 設置( Settings/Preferences | Build, Execution, Deployment | Makefile settings)

中檢查從新加載參數和構建目標。大多數成功運行的項目均可以使用默認參數,但您可能須要在這種狀況下進行一些更改。


③嘗試工具 | Makefile | 清理並從新加載 Makefile 項目(Tools | Makefile | Clean and Reload Makefile Project)。


④若是上述步驟無濟於事,請嘗試從系統目錄中的 /makefiles中清理項目。例如,個人macOS上的 postgres 項目能夠在~/Library/Caches/JetBrains/CLion2020.2/makefiles/postgres.dc29ef09中找到。清理後請從新加載項目。


⑤最後,若是以上全部提示對您都不起做用,請轉到幫助 | 診斷工具 | 調試日誌設置…(Help | Diagnostic Tools | Debug Log Settings… ),

並經過添加com.jetbrains.cidr.cpp.makefile 來打開調試日誌,而後重現問題並將日誌提交給咱們的跟蹤器或支持。


已知問題和侷限性


使用的算法中最脆弱的部分是從 make 命令的輸出中提取編譯命令。咱們發現某些狀況下會發生問題:


①項目禁止打印目錄。所以,該算法沒法正確檢測正在構建的源文件。


②編譯器未知,或者沒法正確提取編譯標誌。諸如 libtool 之類的各類包裝器都會經過隱藏編譯標誌並干擾 Make 的輸出(CPP-19549,CPP-19305)而產生更多問題。


咱們採用了幾種啓發法來克服測試項目中遇到的狀況。用戶還能夠在提取項目信息時控制用於調用 make 命令的參數:設置/偏好 | 構建、執行、部署 | Makefile | 參數(Settings/Preferences | Build, Execution, Deployment | Makefile | Arguments)。


接下來能夠期待什麼?


①Makefile 支持插件:該插件提供代碼高亮顯示功能以及對構建 make 項目的一些支持。計劃是從新設計並將其捆綁到 CLion(CPP-16933)中。


②稍後將爲 Makefile 項目啓用單元測試集成(CPP-20718)。


③添加將 Makefile 連接到現有項目的功能(CPP-20733)。


④更改工具鏈或影響項目加載的其餘設置應觸發從新加載(CPP-18982)。


⑤爲了擴展對 GNU Autotool 項目的支持,容許用戶爲 Makefile 項目(CPP-16924)設置」預配置」步驟。


⑥支持非 GNU Makes(NMake、BSD)(CPP-18723)。


⑦用編譯包裝器實現該方法,並使它與當前的包裝器結合使用。


但在此以前,咱們計劃完善當前的原型並解決各類問題。因此,您的反饋對咱們很是重要且寶貴。請在咱們的問題跟蹤器中報告您遇到的任何問題。


閱讀原文可查看咱們在如下提供了在原型中測試過的項目列表:CLion 中的 Makefile 項目。


閱讀原文查看下載 CLION 2020.2 EAP

點擊查看歷史資訊

JetBrains教育產品:課程創新者的新功能

2018開發人員生態系統:C和C++的主要趨勢

JetBrains 將提供免費開源教育產品!

2018開發人員生態系統調查,什麼是編程世界的驅動力


戳原文,更有料!

本文分享自微信公衆號 - Kotlin(KotlinX)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索