翻譯|使用教程|編輯:吳園園|2020-05-27 11:01:06.143|閱讀 2795 次
概述:對(duì)于非CMake和非Gradle項(xiàng)目,您仍然可以從CLion提供的高級(jí)IDE功能中受益。一種方法是導(dǎo)入非CMake項(xiàng)目,然后讓CLion將其轉(zhuǎn)換為簡(jiǎn)單的CMake結(jié)構(gòu)。另一種選擇是通過(guò)加載項(xiàng)目的編譯數(shù)據(jù)庫(kù)來(lái)打開(kāi)項(xiàng)目。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
CLion是一款專為開(kāi)發(fā)C及C++所設(shè)計(jì)的跨平臺(tái)IDE。它是以IntelliJ為基礎(chǔ)設(shè)計(jì)的,包含了許多智能功能來(lái)提高開(kāi)發(fā)人員的生產(chǎn)力。這種強(qiáng)大的IDE幫助開(kāi)發(fā)人員在Linux、OS X和Windows上來(lái)開(kāi)發(fā)C/C++,同時(shí)它還使用智能編輯器來(lái)提高代碼質(zhì)量、自動(dòng)代碼重構(gòu)并且深度整合CMake編譯系統(tǒng),從而提高開(kāi)發(fā)人員的工作效率。感興趣的朋友歡迎下載試用!CLion現(xiàn)已加入在線訂購(gòu),點(diǎn)擊此處查看價(jià)格詳情>>
對(duì)于非CMake和非Gradle項(xiàng)目,您仍然可以從CLion提供的高級(jí)IDE功能中受益。一種方法是導(dǎo)入非CMake項(xiàng)目,然后讓CLion將其轉(zhuǎn)換為簡(jiǎn)單的CMake結(jié)構(gòu)。另一種選擇是通過(guò)加載項(xiàng)目的編譯數(shù)據(jù)庫(kù)來(lái)打開(kāi)項(xiàng)目。
使用編譯數(shù)據(jù)庫(kù),CLion可以檢測(cè)項(xiàng)目文件并提取所有必需的編譯器信息,例如包含路徑和編譯標(biāo)志。這種方法使您可以在IDE中進(jìn)行操作并獲得其功能的完整體驗(yàn),同時(shí)使您的項(xiàng)目獨(dú)立于CMake或Gradle。
一個(gè)編譯數(shù)據(jù)庫(kù)是一個(gè) JSON命名-格式化文件compile_commands.json 包含有關(guān)項(xiàng)目中每個(gè)編譯單元的結(jié)構(gòu)化數(shù)據(jù)。
以下代碼段顯示了JSON編譯數(shù)據(jù)庫(kù)的示例:
{ "directory": "/Users/me/prj/Calendar/", "command": "/usr/local/bin/g++-7 -I/Users/me/prj/Calendar/calendars -g -std=c++11 -o calendar_run.dir/main.cpp.o -c /Users/me/prj/Calendar/main.cpp", "file": "/Users/me/prj/Calendar/main.cpp" }, { "directory": "/Users/me/prj/Calendar/calendars", "command": "/usr/local/bin/g++-7 -I/Users/me/prj/Calendar/calendars -g -std=c++11 -o calendars.dir/calendar_defs.cpp.o -c /Users/me/prj/Calendar/calendars/calendar_defs.cpp", "file": "/Users/me/prj/Calendar/calendars/calendar_defs.cpp" }
您可以看到稱為命令對(duì)象的條目數(shù)組。每個(gè)命令對(duì)象代表翻譯單元的主文件,工作目錄,實(shí)際的編譯命令(或參數(shù)列表),以及可選的由編譯步驟創(chuàng)建的輸出的名稱。
生成編譯數(shù)據(jù)庫(kù)
要獲得項(xiàng)目的編譯數(shù)據(jù)庫(kù),您可以使用多種選擇:它可以由編譯器,構(gòu)建系統(tǒng)和專用工具生成。以下是一些示例:
CMake:
使用CMAKE_EXPORT_COMPILE_COMMANDS 標(biāo)志。你可以運(yùn)行
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON…
或將以下行添加到您的CMakeLists.txt腳本中:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
compile_commands.json 文件將被放入構(gòu)建目錄。
CMAKE_EXPORT_COMPILE_COMMANDS僅由Makefile和Ninja 生成器實(shí)現(xiàn)。對(duì)于其他生成器,此選項(xiàng)將被忽略。
請(qǐng)注意,NMAKE生成器創(chuàng)建了不正確的編譯數(shù)據(jù)庫(kù),這是一個(gè)已知問(wèn)題
Clang(5.0及更高版本):
該-Mj 選項(xiàng)寫入每個(gè)輸入文件匯編條目。您可以將其用于項(xiàng)目中的每個(gè)文件,然后將輸出合并到JSON格式的編譯數(shù)據(jù)庫(kù)中
Ninja(1.2版及更高版本):
要獲取編譯數(shù)據(jù)庫(kù),請(qǐng)使用 -t compdb選項(xiàng)。請(qǐng)注意,它需要使用規(guī)則名稱作為參數(shù):-t compdb rule1 rule2...Ninja構(gòu)建文件(默認(rèn)名稱build.ninja)中提供了規(guī)則列表,例如:
rule cc command = gcc -c -o $out $in description = CC $out rule link command = gcc -o $out $in description = LINK $out
要在只有一個(gè)名為的規(guī)則的情況下生成編譯數(shù)據(jù)庫(kù)cc,請(qǐng)指定:
-t compdb cc > compile_commands.json
但是對(duì)于多個(gè)規(guī)則,您需要從構(gòu)建文件中獲取其確切名稱,并將其傳遞給 compdb
基于Make的項(xiàng)目:
該compiledb發(fā)電機(jī)工具,Makeup基礎(chǔ)構(gòu)建系統(tǒng)創(chuàng)建編譯數(shù)據(jù)庫(kù)。
Bear和攔截構(gòu)建工具:
從scan-build 進(jìn)行Bear和intercept-build是通過(guò)在構(gòu)建過(guò)程中攔截編譯器調(diào)用來(lái)幫助您獲得編譯數(shù)據(jù)庫(kù)的工具。
SourceTrail Visual Studio擴(kuò)展:
SourceTrail Extension 可以為MS Visual Studio解決方案生成一個(gè)編譯數(shù)據(jù)庫(kù)。
在CLion中使用編譯數(shù)據(jù)庫(kù)
載入專案
為項(xiàng)目創(chuàng)建編譯數(shù)據(jù)庫(kù)后,可以將其加載到CLion中。導(dǎo)航到文件| 在主菜單上打開(kāi),選擇compile_commands.json文件或包含該文件的目錄,然后單擊“ 以項(xiàng)目形式打開(kāi)”。
結(jié)果,檢測(cè)到項(xiàng)目文件,并且所有命令的狀態(tài)都在 compile_commands.json顯示在“ 構(gòu)建工具”窗口中:
項(xiàng)目文件可以位于包含以下內(nèi)容的目錄之外 compile_commands.json。CLion從編譯數(shù)據(jù)庫(kù)中提取實(shí)際路徑,并收集項(xiàng)目文件,無(wú)論它們位于何處。
現(xiàn)在,CLion的代碼洞察力,重構(gòu),分析和導(dǎo)航功能可完全用于您的項(xiàng)目。
CLion本機(jī)支持JSON文件格式,因此您可以編輯compile_database.json文件直接在IDE中顯示,并帶有突出顯示和代碼完成幫助。此外,CLion還會(huì)檢查您的合規(guī)性compile_database.json 文件與編譯數(shù)據(jù)庫(kù)JSON模式。例如,它會(huì)在命令條目中缺少屬性或使用錯(cuò)誤類型時(shí)發(fā)出通知:
更改項(xiàng)目根目錄
默認(rèn)情況下,項(xiàng)目根目錄設(shè)置為包含編譯數(shù)據(jù)庫(kù)文件的目錄。但是,這并不總是很方便:例如,如果某些項(xiàng)目文件位于目錄之外,compile_commands.json(即在項(xiàng)目根目錄之外),無(wú)論實(shí)際的文件夾結(jié)構(gòu)如何,此類文件都會(huì)在樹(shù)中列出。在這種情況下,您需要將項(xiàng)目根目錄設(shè)置為包含兩個(gè)目錄的父目錄compile_commands.json 和項(xiàng)目文件。
要更改項(xiàng)目根目錄,請(qǐng)選擇“ 工具” |“工具”。編譯數(shù)據(jù)庫(kù)| 從主菜單更改“項(xiàng)目根目錄 ”,并為項(xiàng)目根目錄提供其他位置。
自動(dòng)導(dǎo)入并重新加載項(xiàng)目
為了使您的項(xiàng)目在每次更改時(shí)都自動(dòng)重新加載 compile_command.json,在“設(shè)置” /“首選項(xiàng)” |“設(shè)置”中設(shè)置“ 使用自動(dòng)導(dǎo)入”復(fù)選框。 構(gòu)建,執(zhí)行,部署| 編譯數(shù)據(jù)庫(kù)。如果取消選中此復(fù)選框,則在對(duì)編譯數(shù)據(jù)庫(kù)文件進(jìn)行任何修改后,都會(huì)顯示一條彈出消息,提示您導(dǎo)入更改:
您也可以使用“ 工具” | “ 重新加載編譯數(shù)據(jù)庫(kù)項(xiàng)目”操作。編譯數(shù)據(jù)庫(kù)菜單可在需要時(shí)手動(dòng)刷新項(xiàng)目。
編譯一個(gè)文件
盡管CLion尚未實(shí)現(xiàn)用于編譯數(shù)據(jù)庫(kù)項(xiàng)目的構(gòu)建功能,但是您可能會(huì)發(fā)現(xiàn)在不構(gòu)建整個(gè)項(xiàng)目的情況下檢查單個(gè)文件中的更改很有用。為此,CLion提供了“重新編譯”操作。它可用于單個(gè)源文件和頭文件,也可用于項(xiàng)目樹(shù)中選擇的文件組。對(duì)于標(biāo)題,CLion使用resolve上下文來(lái)編譯包含指定標(biāo)題的源文件之一。請(qǐng)注意,目錄和非C / C ++文件均禁用了重新編譯。
要為當(dāng)前打開(kāi)的文件調(diào)用“重新編譯 ”,請(qǐng)選擇“ 生成” |“新建”。從主菜單重新編譯(或按Ctrl+Shift+F9)。對(duì)于項(xiàng)目樹(shù)中的文件,請(qǐng)使用右鍵單擊菜單中的“重新編譯”選項(xiàng)(或按相同的Ctrl+Shift+F9鍵)。要重新編譯幾個(gè)文件,請(qǐng)?jiān)陧?xiàng)目樹(shù)中選擇它們,然后使用右鍵菜單中的Recompile selected files選項(xiàng)Ctrl+Shift+F9。請(qǐng)注意,當(dāng)用于多個(gè)文件時(shí),重新編譯將在第一次編譯失敗時(shí)停止。
重新編譯文件時(shí),CLion從對(duì)應(yīng)的命令對(duì)象中提取必要的信息compile_commands.json:編譯命令行(但CLion會(huì)抑制輸出并刪除指定輸出文件的標(biāo)志),以及要使用的編譯器。
將目錄標(biāo)記為。
“ 標(biāo)記目錄為”操作也可用于您的編譯數(shù)據(jù)庫(kù)項(xiàng)目。在項(xiàng)目工具窗口中選擇一個(gè)目錄,右鍵單擊它,然后選擇將目錄標(biāo)記為操作。有關(guān)用例的描述以及有關(guān)CLion如何處理已標(biāo)記目錄的更多詳細(xì)信息,請(qǐng)參閱“ 控制源,庫(kù)和排除目錄”部分。
構(gòu)建并運(yùn)行
編譯數(shù)據(jù)庫(kù)本身缺少構(gòu)建,運(yùn)行和調(diào)試應(yīng)用程序所需的數(shù)據(jù)。但是,可以通過(guò)為編譯數(shù)據(jù)庫(kù)項(xiàng)目添加自定義構(gòu)建目標(biāo)并為這些目標(biāo)創(chuàng)建自定義運(yùn)行/調(diào)試配置來(lái)設(shè)置工作流程。
=====================================================
更多關(guān)于CLion的教程、資源敬請(qǐng)關(guān)注我們即將推出的后續(xù)教程哦~
想要購(gòu)買Clion正版授權(quán)的朋友歡迎。
JetBrain技術(shù)交流群現(xiàn)已開(kāi)通,QQ搜索群號(hào)“786598704”或者掃描下方二維碼即可加入
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: