翻譯|使用教程|編輯:董玉霞|2022-09-09 11:43:27.117|閱讀 754 次
概述:CLion是一個 IDE,它提供了許多功能來幫助開發人員。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
CLion是一個 IDE,它提供了許多功能來幫助開發人員。它顯示文檔彈出窗口、動態檢測錯誤、建議修復等。內部代碼分析器始終在后臺運行,在您鍵入時分析 C 和 C++ 代碼。C 和 C++ 對于自動分析器來說是具有挑戰性的語言,因為正確解析代碼需要特定于編譯器的數據。引擎需要知道標題搜索路徑、預定義的宏定義和其他一些細節。
對于一組預定義的已知編譯器,CLion 使用特殊選項運行項目的編譯器,并在解析項目時收集所需的信息。當然,這只適用于有限數量的編譯器,如 GCC、Clang、MSVC、IAR 及其衍生產品。如果項目使用特定的自定義編譯器、很少使用的編譯器或我們無法訪問的專有編譯器以正確集成它,那么 CLion 無法通過其標準過程使用它。在這種情況下,您可以選擇使用自定義編譯器功能。
要在 CLion 中使用自定義編譯器,您需要一個包含必要編譯器數據的 YAML 文件。這樣的文件應該包含一個或多個部分,每個部分描述一個特定的編譯器或編譯器變體。每個部分都應該有一個描述、一個或多個匹配記錄和幾個信息記錄。
當 CLion 解析項目并遇到項目文件的編譯器時,CLion 會逐節掃描并檢查編譯器是否與記錄匹配。匹配是使用一個或多個匹配記錄完成的。可用的匹配記錄包括:
一旦成功解決了所有匹配項,就會選擇節信息記錄,并跳過 YAML 文件的其余部分。編譯器數據取自信息記錄,然后直接傳遞給 CLion 的代碼分析器;也就是說,在編譯器試運行期間不會收集數據。
如果沒有任何部分為 IDE 提供將記錄與特定編譯器正匹配的信息,它會嘗試以通常的方式收集編譯器數據——通過猜測編譯器的類型并運行編譯器。
要開始編寫自定義編譯器 YAML 文件,您需要確定有關編譯器的以下詳細信息:
讓我們通過為SmallDevice C Compiler (SDCC)編寫自定義編譯器 YAML 文件來實踐這個過程。SDCC 支持多種 8 位 CPU 架構,例如 STM8、Z80 等。該編譯器是開源的,它是多個 MCU 系列的唯一免費編譯器。在此示例中,我們將為其 Microchip PIC-16 變體(端口)編寫一個 YAML 文件。
以下是我們需要了解的有關此編譯器的詳細信息:
我們將從創建一個測試項目開始。最小的項目包含一個 C 文件、YAML 文件本身和一個構建系統文件。我們將使用Makefile。如果應該使用 C++,那么還應該添加另一個用 C++ 編寫的源文件。
首先,創建一個項目文件夾,在里面創建一個空的Makefile。
在 CLion 中打開該文件夾,然后在彈出的“加載項目”對話框中單擊“取消”。
在 CLion 編輯器中打開Makefile并將最少的內容添加到該Makefile中:
clean: all: main.c sdcc -mpic16 --use-non-free -S main.c
該文件現在包含一個將 main.c 編譯成匯編的命令,無需進一步的步驟。
創建一個main.c文件。讓我們制作一個經典的“Hello, World”,添加 SDCC 特定的附加功能——__code關鍵字和預定義的宏__SDCC_pic16。
#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } int __code i = 0; #ifndef __SDCC_pic16 # error "__SDCC_pic16 macro is expected to be defined" #endif
現在我們編寫一個自定義編譯器配置存根:
創建一個名為clion-custom-compiler-sdcc-pic16.yaml 的文件。
將 JSON 模式“自定義編譯器定義”分配給文件。
自定義編譯器方案已驗證這樣,CLion 可以幫助您進行即時文件結構驗證和輸入提示。架構名稱顯示在 IDE 狀態欄中,可以通過單擊名稱來選擇。
存根是:
compilers: - description: SDCC for PIC-16 match-compiler-exe: "(.*/)?sdcc(.exe)?"
目前,我們僅按名稱匹配。它是一個匹配 Linux 和 Windows 編譯器二進制名稱的正則表達式,與包含的文件夾無關。
下一步是在 CLion 中使用我們的自定義編譯器配置。打開設置/首選項 | 構建、執行、部署 | 工具鏈 | 自定義編譯器。選中Use custom compiler config并選擇項目的 YAML 文件作為配置文件。
在工具菜單中選擇Makefile | 清理并重新加載 Makefile 項目。如果一切正常,構建工具窗口將顯示項目已成功加載。
如果項目未正確加載,則應仔細檢查 YAML 文件中的match-compiler-exe語句。記錄值是一個正則表達式,它是過程中最脆弱的部分。
現在讓我們檢查一下 CLion 是否確實已經接受了 SDCC,并且我們的項目按預期工作。
在編輯器中打開main.c。此時可以看到一些錯誤。轉到幫助 | 診斷工具并選擇Show Compiler Info。這將打開一個診斷頁面,其中包含正在編輯的文件的編譯器信息。在這里您可以看到編譯器類型(“自定義編譯器”)和檢測到的編譯器描述(“SDCC for PIC-16”)。這意味著 CLion 知道項目結構,但代碼分析器還沒有所需的編譯器數據,因此在main.c中顯示各種錯誤。
main.c文件目前看起來已損壞。未找到stdio.hprintf ,未定義,__code修飾符錯誤,并且未定義文檔中的預定義宏。
讓我們通過提供正確的編譯器信息來解決所有這些問題。
幸運的是,SDCC 可以打印標題位置和預定義的宏。將以下行添加到Makefile將起到作用:
gather_info: # List directories sdcc -mpic16 --use-non-free --print-search-dirs # Create a void C file echo //void > void.c # List predefined macros sdcc -mpic16 --use-non-free -E -dM void.c
… includedir: C:\Program Files\SDCC\bin\..\include\pic16 C:\Program Files\SDCC\bin\..\include C:\Program Files\SDCC\bin\..\non-free\include\pic16 C:\Program Files\SDCC\bin\..\non-free\include …
唯一的問題是這些路徑是絕對路徑。出于可移植性的原因,讓我們將它們相對于編譯器位置,并將它們作為include-dirs數組添加到編譯器定義中。 接下來是預定義的宏。它們打印在輸出的最底部。它們可以通過定義文本添加到 YAML 文件中。
match-args: -mpic16最后但同樣重要的是,我們需要通過使用and語句使我們的編譯器匹配更具體一些 match-language: C,然后添加 SDCC 語言擴展詞作為空定義。完成后,最終的 YAML 文件將如下所示:
compilers: - description: SDCC for PIC-16 match-compiler-exe: "(.*/)?sdcc(.exe)?" match-args: -mpic16 match-language: C include-dirs: - ${compiler-exe-dir}/../include/pic16 - ${compiler-exe-dir}/../include - ${compiler-exe-dir}/../non-free/include/pic16 - ${compiler-exe-dir}/../non-free/include defines-text: " #define __SDCC_USE_NON_FREE 1 #define __SDCC_PIC18F452 1 #define __18f452 1 #define __STACK_MODEL_SMALL 1 #define __SDCC_pic16 1 #define __SDCC_ALL_CALLEE_SAVES 1 #define __STDC_VERSION__ 201112L #define __STDC_HOSTED__ 0 #define __SDCCCALL 0 #define __STDC_UTF_16__ 1 #define __SDCC_VERSION_MINOR 2 #define __STDC_ISO_10646__ 201409L #define __SDCC_VERSION_PATCH 0 #define __SDCC_VERSION_MAJOR 4 #define __STDC_NO_VLA__ 1 #define __SDCC 4_2_0 #define __STDC_UTF_32__ 1 #define __STDC_NO_THREADS__ 1 #define __SDCC_CHAR_UNSIGNED 1 #define __STDC_NO_ATOMICS__ 1 #define __STDC__ 1 #define __SDCC_REVISION 13081 #define __STDC_NO_COMPLEX__ 1 #define __interrupt #define __code #define __at "
現在我們可以重新加載項目(Tools | Makefile | Reload Makefile Project)并再次檢查main.c文件。
錯誤消失了,可以導航到stdio.h。Show Compiler Info窗口顯示正確的信息——包括預定義的宏、語言特性和標題搜索路徑。
這個最終的 YAML 文件可以在GitHub上找到。
以上就是關于在 CLion 中使用任意編譯器的快速指南,更多關于CLion使用教程的內容可進入官網查看。
CLion是一款專為開發C及C++所設計的跨平臺IDE。它是以IntelliJ為基礎設計的,包含了許多智能功能來提高開發人員的生產力。
CLion技術交流QQ群:786598704 歡迎進群一起討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn