记录在Clion2022.2版本中使用Makefile工程,并配置编译前清理,编译后复制。

记录在Clion2022.2版本中使用Makefile工程

前言

首先是有这么一个应用场景,在Windows使用Clion,在虚拟机中的ubuntu系统装有交叉编译器,编译出来的文件要上传到Linux开发板上运行。

其实快速的解决方法也很简单,在Windows上使用Clion和交叉编译器,或者,直接在Linux上使用Clion和交叉编译器,都可以解决好多问题。

但是今天就是要在这么奇怪的组合上使用,我也叹服我自己要这么折腾,一是不想舍弃Clion的代码提示,二是不改变原有的编译环境。

缺点是,总体上来说,Clion到目前为止,支持Makefile工程还是一般般,代码提示比较给力,调试等其他功能,使用远程调试时并且使用Makefile几乎等同于不可用。


打开Makefile工程

Clion识别Makefile工程也很简单,直接使用Clion打开项目中最顶层的Makefile文件,选择作为项目打开,即可将项目识别为Makefile工程。

首次打开,会询问清理文件的target名称,一般习惯上clean作为清理文件target,填入即可。

具体的操作请查看Clion官方的介绍

jetbrains对makefile的说明


编译前后的一些配置

一、编译前清理文件

这里使用了远程shell命令实现,也算是绕了一大圈子再工作。

1.增加远程SSH外部工具

文件>设置>工具>远程SSH外部工具,点击“+”号增加一个配置,

  • 名称填写命名规则合法的的名称即可
  • 工具设置 :
    • 程序:需要执行的程序
    • 实参:执行程序时的参数
    • 工作目录:连接上后切换到这个目录再执行程序
      例如:在图中转换成命令就是:
cd \home\vmuser\prj1
make clean

需要注意的是,工作目录别忘了设置,不然在错误的位置执行命令,可能会导致无法预知的事情发生。

增加远程SSH外部工具

2.配置到编译项目的配置中

在Clion界面左上角找到这个配置图标,下拉,点击编辑。

在这里插入图片描述

进入到如下界面,在执行前,点击“+”号,添加运行远程外部工具,勾选刚才的增加远程SSH外部工具。

在这里插入图片描述


二、编译后的文件复制到nfs目录

默认中,编译后执行文件的的路径设定在使用Clion的机器中,如果需要运行交叉编译器的ubuntu系统执行运行命令,须先切换机器到远程ubuntu。

1.切换到远程系统

文件>设置>构建、执行、部署>运行目标 中,点击“+”号增加一个配置,连接到目的远程机器。

在这里插入图片描述

增加机器后,在下方,项目默认目标更改为刚刚新增的目标机器,右下角点击应用再点击确定

2.更改调试选项中的配置

在Clion界面左上角找到这个配置图标,下拉,点击编辑。

在这里插入图片描述

进入到这个界面:

在这里插入图片描述

直接写入执行的文件名 cpfile.sh,其中cpfile.sh的内容如下,/nfsroot是nfs server的目录,app是make生成的目标文件。

cp app /nfsroot/

每次运行项目,编译后,会执行cpfile.sh这个文件,虽然绕了不少弯路,但也算是完成了这个功能。

按照目前这种繁琐的操作,应该还有很大的改进空间,期待能有大佬挖掘出来。

最终解决方案

后面我使用VS Code,插件实在是太香了。
工程文件如图中,编辑launch.json和task.json文件编辑一下就能正常使用。配合remote ssh插件,直接编辑虚拟机的文件。
task.json文件内容:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "make生成活动文件",
            "command": "/usr/bin/make",
            "args": [
                "EXE"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        },
        {
            "type": "process",
            "label": "make清理文件",
            "command": "/usr/bin/make",
            "args": [
                "clean"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "detail": "调试器清理文件的任务。"
        }
    ],
    "version": "2.0.0"
}

launch.json文件内容:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "preLaunchTask": "make清理文件",
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/app_run",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}

以上文件说明,在执行 (gdb) 启动 任务时,由于一下语句存在:

"preLaunchTask": "make清理文件"

会先执行一遍tasks.json文件中label名为make清理文件的任务。其中make清理文件的内容如下:

{
    "type": "process",
      "label": "make清理文件",
      "command": "/usr/bin/make",
      "args": [
          "clean"
      ],
      "options": {
          "cwd": "${fileDirname}"
      },
      "detail": "调试器清理文件的任务。"
}

翻译过来就是

cd ${fileDirname}
/usr/bin/make clean

两条命令。
可见,方便很多。VS Code还是香。暂时先用VS Code,后续再发掘Clion。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值