如何优雅的使用CLion在WSL下调试来完成datalab

前言

本文所提到的方法是在Windows的CLion下,通过CLion编写代码、通过远程执行cmake、make、gcc、gdb来实现的。
代码在本机Windows下保存,并通过CLion的development功能自动同步到远端、通过WSL上的工具完成编译和执行。
基础要求:

  • WSL下安装了cmake、make、gcc、gdb等基础开发工具(通过apt-get均可获得,本文不赘述其安装方法)
  • WSL开启了ssh,例如参考这两篇文章:https://www.jianshu.com/p/cd4d604e0b44https://www.jianshu.com/p/d8874d5a3027 。最好不要使用22端口,引起冲突的概率极高。
  • 在Windows下全局安装一个python包compiledb
    script
    1
    pip3 install compiledb

创建compiledb文件和cmake文件

为了让Clion识别和正确运行,以下步骤是必不可少的。
首先,在Windows控制台中切换到本机代码目录,执行:

script
1
compiledb -n make

之后会看到目录里生成了compile_commands.json文件。

然后在代码目录里添加文件CMakeLists.txt,内容如下:**请注意以下文件中“项目名”三个汉字一共出现了四次,请全部将它替换为自己项目的真实项目名(也就是代码存放目录的文件夹名)

1
2
3
4
5
6
7
8
9
10
cmake_minimum_required(VERSION 3.4.1)
project(项目名)
message(${项目名_SOURCE_DIR})
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE 1)
add_custom_target(run
COMMAND make clean -C ${项目名_SOURCE_DIR}
COMMAND make -C ${项目名_SOURCE_DIR}
CLION_EXE_DIR=${PROJECT_BINARY_DIR}
)

请注意:因为Linux和Windows的系统默认编码可能存在差异,请尽量不要让代码的路径中含有任何中文字符,否则(在我的机器上测试)会引起错误!

CLion打开项目

打开CLion,选择File-Open,找到Windows存放代码的目录下的CMakeLists.txt(就是刚才创建的那个),点击Open;
此时如果弹出对话框点击”Open As Project”(如果没弹出则忽略)

配置ToolChains

CLion中,File-Settings-Build, Execution, Deployment-Toolchains,点击加号,出来的列表中点击WSL;
右侧Credentials选好端口号用户名密码,下方选择WSL CMake和WSL GDB,等到所有的自动检测都显示绿色的对勾,点击应用。

配置远程目录

CLion中,Tools-Deployment-Configuration,按照提示配置远程WSL的连接和设置目录映射。这个不是很难,直接看英文大概率能看懂,或者参考这篇https://blog.csdn.net/lihao21/article/details/87425187
并建议Tools-Deployment-Auto Upload打上勾,以免出现本地远程不同步的尴尬情况。

配置CMake

CLion中,File-Settings-Build, Execution, Deployment-CMake,+添加新的,Build type为Debug(或Release),Toolchain选择刚刚建立的WSL上的那个Toolchain。
之后等CMake重新加载(如果没有自动进行,就手动:Tools-CMake-Reload CMake Project),之后应该能看到运行配置里出现了那个我们之前添加的Debug-WSL的配置。

手动make一次(这步不可或缺,但是原因不明)

打开wsl(或者用clion的SSH Terminal也可以),cd到硬盘所在的目录,也就是/mnt里的那个地方,找到Windows下的代码目录,执行一次make。然后应该能在CLion中看到生成的的可执行文件。此时记得上传本地代码到WSL:Tools-Deployment-Upload To …
或者另一种方法也是可以的:先把代码上传到WSL,再在WSL中找到远程映射目录,make,然后回到CLion,选择Tools-Development-Download from …把生成的文件拿回本地。

可以运行了

确保运行配置切换到了WSL对应的cmake配置,点击run按钮,会弹出对话框,需要选择执行文件。Executable中,点击Select Other,找到刚生成的可执行文件,确定,然后Run。大功告成。
之后每次修改代码,不需要重复手动make的步骤(手动make只用执行一次),直接保存后点击run按钮就可以了。

可选:如果想要使用debug功能的话

CMakeLists.txt需要稍作改动,在最下方添加内容如下:

1
2
3
4
5
6
add_custom_target(runWithDebug
COMMAND make clean -C ${项目名_SOURCE_DIR}
COMMAND make -C ${项目名_SOURCE_DIR}
DEBUG=true
CLION_EXE_DIR=${PROJECT_BINARY_DIR}
)

Makefile也需要稍作改动,需要添加一个条件判断,使得当执行make选择传入的DEBUG变量为值true时,能够在gcc编译命令中删掉-O优化、添加-g和-DDEBUG选项。
这个需要根据你的Makefile文件做具体的修改。例如,本次datalab的修改方法如下:在行LIBS = -lm后面加入

1
2
3
ifeq ($(DEBUG), true)
CFLAGS = -Wall -m32 -g -DDEBUG
endif

(当然,如果你在64位WSL下运行,那么所有的-m32都应该改为-m64,无论是这里新加的的还是上面的那个)
以上操作完成并重新加载CMake后,在运行选项里会看到有一个配置叫runWithDebug,选中它,然后点击调试标志即可。

datalab Clion项目配置示例Github项目

点击这里,详见其中的README.md