23 Star 5 Fork 6

openKylin / extensions-repo

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
C-C++开发.md 14.28 KB
Copy Edit Raw Blame History
cxszbd authored 2023-08-24 03:22 . update user-guide/files/C-C++开发.md.

C-C++开发

通过通用集成开发环境进行C/C++项目开发。

1 环境准备

1.1 编译器检查

开始之前准备C/C++编译环境,检查C/C++编译器。本系统都有自带的编译器(g++和gcc),通过以下命令可以验证是是否正确安装了C/C++编译器

  • 终端打开一个新的命令行,在命令行中输入以下命令,以验证C编译器是否安装正确

        gcc --version
  • 在命令行中输入以下命令,以验证C++编译器是否安装正确

        g++ --version

如果C/C++编译器安装成功,那么在命令行中就会输出C/C++编译器的版本信息

1.2 安装clangd语言服务器

clangd为C/C++的语言服务器,Clangd插件需要安装9以上的clangd版本,通过以下方式可以安装clangd软件包

  • 方式一:在命令行中参考输入以下命令,安装并验证clangd是否安装成功

        sudo apt install clangd  //在系统包以deb形式管理的操作系统上安装clangd
        sudo yum install clang-tools-extra  //或者在系统包以rpm形式管理的操作系统上安装clangd
        clangd --version //检查是否正确安装
  • 方式二:插件商店查找并安装插件管理插件extension dependency,插件安装后调用命令打开插件管理页面,查找clangd插件相关依赖进行安装,具体操作详情见:插件依赖管理

1.3 安装QT相关依赖

用户如果编译QT程序,可通过以下命令安装QT相关依赖包

  • 在命令行中输入以下命令,安装QT4依赖包

        sudo apt install libqt4-dev  //在系统包以deb形式管理的操作系统上安装该软件
        sudo yum install qt-devel   //或在系统包以rpm形式管理的操作系统上安装该软件
  • 在命令行中输入以下命令,安装QT5依赖包

        sudo apt install qtbase5-dev    //在系统包以deb形式管理的操作系统上安装该软件
        sudo yum install qt5-qtbase-devel   //或在系统包以rpm形式管理的操作系统上安装该软件

1.4 C/C++相关插件安装

  • Clangd插件安装(该clangd插件ID是KylinIDETeam.vscode-clangd,插件的发布者是KylinIdeTeam。该插件为C/C++提供补全、导航和检查等语法功能)
    • 启动通用集成开发环境
    • 点击活动栏中的插件图标,调出插件视图
    • 点击插件视图中的插件筛选器图标,选择Kylin-IDE(KylinCode)插件分类->C语言支持
    • 点击Clangd进行安装 图1 clangd插件安装
  • Native Debug 安装(ID:KylinIdeTeam.debug,该插件提供C/C++调试功能)
    • 启动通用集成开发环境
    • 点击活动栏中的插件图标,调出插件视图。
    • 点击插件视图中的插件筛选器图标,选择Kylin-IDE(KylinCode)插件分类->C语言支持
    • 点击Native Debug安装

2 C/C++项目创建与编辑

2.1 项目创建

2.1.1 C/C++程序简单创建

  • 创建c项目
    • 在终端创建文件夹CProject
    • 启动通用集成开发环境,点击文件->打开文件夹,选择CProject
    • 点击新建文件图标,创建hello.c 图3 C程序创建
  • 创建c++项目
    • 在终端创建文件夹C++Project
    • 启动通用集成开发环境,点击文件->打开文件夹,选择C++Project
    • 点击新建文件图标,创建hello.cpp 图4 C++程序创建

2.1.2 通过项目创建插件创建c/c++程序

  • 插件商店点击筛选器插件-》点击Kylin-IDE(KylinCode)插件分类-》点击项目创建-》点击安装项目管理插件Kylin Project Manager,插件安装后点击资源管理器视图,进入项目操作区创建C/C++程序,创建具体操作详情见:项目管理插件 图5 项目创建插件创建程序

2.2 编辑

2.2.1 C语言编辑

  • 在新建的hello.c文件中输入C程序代码

    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        printf("Hello World!\n");
        return 0;
    }

    编辑区支持C程序语言高亮、补全、导航等功能:

    • 语法高亮,观察编辑区程序关键字、头文件等是否着色(语义高亮功能需系统软件clangd软件包9以上版本,目前LoongArch平台的clangd软件未完全支持该功能,LoongArch平台仅支持变量或者函数名等定义处高亮) 图6
    • 补全,鼠标键入关键字等部分字符,将会提示补全关键字信息 图7
    • 导航,鼠标放置调用的函数右键,点击转到定义,将跳转到该函数的定义处 图8

2.2.2 C++编辑

  • 在新建的hello.cpp文件中输入C++程序代码

    #include <iostream>
    
    int main(int argc,  char *argv[])
    {
    std::cout << "Hello world!" << std::endl;
    }

    与C类似,编辑区支持C++程序语言高亮、补全、导航等功能,LoongArch平台仅支持变量或者函数名等定义处高亮)

2.2.3 Qt代码编辑支持和开发库头文件配置

  • 首先创建QT项目qtdemo,新建main.cpp文件,编辑内容如下:

        #include <QCoreApplication>
        #include <iostream>
        using namespace std;
        int main(int argc,  char *argv[])
        {
        QCoreApplication a(argc,  argv);
        cout<<"Hello World!"<<endl;
        return a.exec();
        }
  • 头文件配置

    • 点击扩展-聚焦Clangd插件,点击设置,点击插件设置,

    • 跳转到设置页面,在搜索设置中输入qt,点击工作区,在qt代码补全头文件设置中选择设置QT4/QT5头文件路径,点击重启clangd服务,如下图所示为QT代码补全头文件设置

      图9 QT头文件设置

3.编译与运行

3.1 C/C++简单程序编译与运行

3.1.1 编译配置

  • 如果用户编译类似上述CProject和C++Project简单项目,需要创建运行配置文件tasks.json,tasks.json文件被存储在.vscode文件夹内。创建方法如下:

    • 点击菜单中的终端->配置任务->使用模板创建tasks.json文件->others

    • tasks.json文件创建成功 创建的tasks.json默认内容如下:

      {
      "version": "2.0.0",
      "tasks": [
          {
              "label": "echo",
              "type": "shell",
              "command": "echo Hello"
          }
        ]
      }
    • C程序修改tasks.json文件内容如下:(C++程序配置可参考C)

      {
      "version": "2.0.0",
      "tasks": [
          {
        "label": "build_c",
        "type": "shell",
        "linux": {
          "command": "gcc", 
                  "args": [
                      "-g",
                      "hello.c",
                      "-o",
                      "hello"
                  ]  
        }
      },        
          {
          "label": "run",
          "type": "shell",   
          "linux": {
              "command": "",  
              "args": ["./hello"]
          }
          }
      ]
      
      }
  • 如果用项目创建插件中创建的C程序(例如参考"项目管理"下的"3.1、创建C/C++项目"3.1、创建C/C++项目),在项目的.vscode目录下有运行配置文件tasks.json,如果没有需要创建。配置内容参考“项目管理”下的“4.1、配置C/C++项目”:4.1、配置C/C++项目

  • 若配置上述QT项目tasks.json文件可参考以下配置:

    {
        "version": "2.0.0", 
        "tasks": [
            {
                "label": "qmake", 
                "type": "shell", 
                "options": {
            "cwd": "${workspaceFolder}/build/"
          }, 
                "command": "qmake", 
                "args": [
                    ".."
                ]
            }, 
            {
                "label": "build", 
                "type": "shell", 
                "options": {
            "cwd": "${workspaceFolder}/build/"
          }, 
                "command": "make", 
                "dependsOn":["qmake"]
            }, 
            {
                "label": "run", 
                "type": "shell", 
                "options": {
            "cwd": "${workspaceFolder}/build/"
          }, 
                "command": "./${workspaceFolderBasename}", 
                "dependsOn":["build"]
            }, 
            {
                "label": "clean", 
                "type": "shell", 
                "options": {
            "cwd": "${workspaceFolder}/build/"
          }, 
                "command": "make distclean"
            }
        ]
    }

    此外,需在qmake项目根目录下需配置qtdemo.pro文件

  • tasks.json中常用参数:

    • label: task名称
    • type:配置类型
    • command:用来指定要执行的程序
    • args字段用于记录执行command需要涉及到的参数
    • cwd: cd到工程中指定的目录
    • dependsOn:填写依赖的任务,需先执行该任务。例如在运行run时先执行build,在run配置中可参考: "dependsOn":["build"]
    • miDebuggerPath:代表调试器(GDB)所在路径
    • preLaunchTask:在运行program前要做的前置任务,比如编译,task.json就是用于定义前置任务
  • 下面介绍一些常用的变量:

    • ${workspaceFolder}:项目文件夹在 IDE中打开的路径
    • ${workspaceFolderBasename}:在 IDE中打开的项目文件夹名称
    • ${file}:当前开打开(激活)的文件
    • ${relativeFile}:相对于 {workspaceFolder} 的文件路径
    • ${fileBasename}:当前打开文件的名称
    • ${fileBasenameNoExtension}:当前打开文件的名称,不带扩展名的
    • ${fileExtname}:当前打开文件的扩展名
    • ${fileDirname}:当前打开文件的文件夹名称
    • ${cwd} -任务运行器启动时的当前工作目录
    • ${lineNumber} -活动文件中当前选定的行号
    • ${selectedText} -活动文件中当前选定的文本
    • ${execPath} -运行IDE可执行文件的路径
    • ${defaultBuildTask} -默认构建任务的名称

3.1.2 进行编译

  • 点击菜单中的终端->运行任务->build->继续而不扫描任务输出,运行任务

    图10 编译

  • 在终端输出运行结果(例如CProject编译运行结果)

    图11 编译结果

3.1.3 运行

  • 点击菜单中的终端->运行任务->run->继续而不扫描任务输出,运行任务

  • 在终端输出运行结果(例如CProject结果)

    图12 C运行结果

4.调试

4.1 C/C++程序调试

  • 调试配置 项目调试之前需进行调试配置,资源管理器点击打开已创建的C或C++程序,点击活动栏运行和调试图标进入视图,点击创建launch.json文件,命令行中选择GDB调试器 launch.json文件创建成功后默认配置如下:

    C程序修改launch.json文件内容如下:

        {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug ",
                "type": "gdb",
                "request": "launch",
                "printCalls": true,
                "showDevDebugOutput": true,
                "target": "./hello",
                "cwd": "${workspaceFolder}",
                "valuesFormatting": "parseText",
                "preLaunchTask": "build_c"
            }
        ]
      }

    C++程序修改launch.json文件内容如下:

      {
    
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug ",
                "type": "gdb",
                "request": "launch",
                "printCalls": true,
                "showDevDebugOutput": true,
                "target": "./hello",
                "cwd": "${workspaceFolder}",
                "valuesFormatting": "parseText",
                "preLaunchTask": "build_cpp"
            }
        ]
    }

    QT 程序修改launch.json文件内容如下:

    {
      "version": "0.2.0", 
      "configurations": [
          {
              "name": "Qt-Debug", 
              "type": "gdb", 
              "request": "launch", 
              "target": "${workspaceFolder}/build/${workspaceFolderBasename}", 
              "arguments": "", 
              "cwd": "${fileDirname}", 
              "gdbpath": "gdb", 
              "valuesFormatting": "parseText", 
              "preLaunchTask": "build" 
          }
      ]
    }
    • 调试常用参数介绍:

      • program:代表要运行的二进制文件所在路径

      • miDebuggerPath:代表调试器(GDB)所在路径

      • environment: 环境变量设置

      • preLaunchTask:在运行program前要做的前置任务,比如编译,task.json就是用于定义前置任务

  • 调试

    • 设置断点 打开c/c++程序(hello.c或者hello.cpp),在编辑区程序中输出信息的一行的最左侧单击,出现红点则断点设置成功

    • 再次进入调试侧边栏,点击开始调试按钮(或者键盘按F5),进入调试功能

    • 程序在断点处暂停,点击调试导航栏单步调试(或者单步进入),左侧侧边栏中可观察调用堆栈、变量等信息

      C程序调试如下: 图13 C调试

      C++程序调试如下: 图14 C++调试

4.2 C/C++程序反向调试

  • 反向调试功能需系统软件gdb支持反向调试,目前X86、LoongArch平台的gdb软件未完全支持该功能,仅ARM平台可以使用该功能

  • 设置断点 打开c/c++程序(hello.c或者hello.cpp),在编辑区程序中输出信息的一行的最左侧单击,出现红点则断点设置成功

  • 再次进入调试侧边栏,点击开始调试按钮(或者键盘按F5),进入调试功能

  • 程序在断点处暂停,点击编辑区右上角Code-Debug:Start reverse debugging按钮

  • 点击调试导航栏单步调试-点击反向调试-点击停止

    C程序反向调试如下: 图15 C反向调试

    C++程序反向调试如下: 图16 C++反向调试

1
https://gitee.com/openkylin/extensions-repo.git
git@gitee.com:openkylin/extensions-repo.git
openkylin
extensions-repo
extensions-repo
master

Search

53164aa7 5694891 3bd8fe86 5694891