# 前言

本文所提到的方法是在 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
pip3 install compiledb

# 创建 compiledb 文件和 cmake 文件

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

script
compiledb -n make

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

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

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 需要稍作改动,在最下方添加内容如下:

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 后面加入

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

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

# datalab Clion 项目配置示例 Github 项目

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