前言
CLion之前只支持Cmake項目,不支持Makefile項目。從2018.2版開始提供對Makefile項目支持。官方博客的教程可以看這裏Working with Makefiles in CLion using Compilation DB
這裏大概介紹一下。CLion通過加載Makefile項目的編譯數據庫(Compilation DB)來打開項目文件來完成代碼補全, 靜態分析, 跳轉 和 重構功能。這樣就完全獲得CLion提供的高級IDE功能。
編譯數據庫(Compilation DB)允許CLion檢測項目文件並提取所有必需的編譯器信息,例如包含路徑和編譯標誌。這種方法使您能夠在IDE中運行並獲得其功能的完整體驗,同時使您的項目獨立於CMake。
一個編譯數據庫是一個名爲compile_commands.json的Json文件,包含有關項目中的每個編譯單元中的結構化數據。
以下代碼段顯示了JSON編譯數據庫的示例:
[
{
"directory": "/home/kevin/Workspace/cWorkspace/libjpeg_cpp",
"arguments": [
"g++",
"-g",
"-O0",
"-std=c++14",
"-Wall",
"-o",
"jpeg.o",
"-c",
"jpeg.cpp"
],
"file": "jpeg.cpp"
},
{
"directory": "/home/kevin/Workspace/cWorkspace/libjpeg_cpp",
"arguments": [
"g++",
"-g",
"-O0",
"-std=c++14",
"-Wall",
"-o",
"main.o",
"-c",
"main.cpp"
],
"file": "main.cpp"
}
]
至於如何生成這個文件,下面會介紹。但是當CLion成功識別這個編譯數據庫文件之後,並不能進行調試。主要是因爲目前CLion調試只能在CMake項目中使用。其實解決起來也不難,只需要在識別編譯數據庫(Compilation DB)之後再建立CMakeLists.txt文件,就能實現調試功能了
安裝compiledb
在開始之前,我們需要安裝一個可以從Makefile生成Compilation DB JSON文件的工具。我們將在本教程中使用的工具是compiledb
。它是用Python編寫的,所以最簡單的方法是使用pip。
$ pip install compiledb
(你可能需要在前面加 sudo)
識別Makefile項目
- 生成Makefile
如果項目本身就是Makefile,不需要再生成。如果是開源項目,往往需要生成Makefile。 - 從Makefile生成compile_commands.json
$ compiledb -nf make
- 使用CLion打開該項目
打開該項目後,CLion將檢測該compile_commands.json文件並查看其項目信息。您可能會在幾秒鐘內看到它,然後在“Build”工具窗口中顯示“Compiler Info”選項卡,告訴您所有內容都已完成(您可以在“Sync”選項卡中看到任何錯誤或警告) )。
- 測試是否建立索引成功
打開一個源碼文件,如果上一步沒有錯誤的話,你應該會看到代碼已經着色了,並且可以聲明和定義之間跳轉了,一切跟你打開CMake項目一樣 - 監聽Makefile修改,自動生成compile_commands.json
如果每次修改完都要手動運行生成compile_commands.json的命令,這就太不程序員了。而且種沒有意義的操作,還是自動化的好。需要安裝下面兩個CLion Plugin:File Watchers, Makefile support
安裝完成並重啓後,就可以配置對makefile的監聽了。按下圖配置即可
調試Makefile項目
完成了上面的步驟,你只能做一些代碼編輯的工作,這樣是不夠的,我們還需要編譯調試。下面就介紹如何編譯調試
- 在項目根目錄新建CMakeLists.txt文件,並填寫如下內容。
cmake_minimum_required(VERSION 3.4.1)
project(libjpeg CXX)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_VERBOSE_MAKEFILE 1)
add_custom_target(makeJpegCmd
COMMAND make -j8
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
點擊Load CMake project,如下圖所示
配置Run/Debug
再切換到Compilation DB。Tools -> Compilation Database -> Reload Compilation Database Project
這樣就可以開始在Makefile項目上開發,編譯並調試了。
以下是調試界面截圖