当前位置: 首页 > article >正文

CLion远程开发Ubuntu,并显示helloworld文字框

1.CLion的介绍以及其在远程开发上的优点

1)CLion 是一个由 JetBrains 开发的跨平台 C/C++ 集成开发环境(IDE),功能强大。

2)CLion的优点:

  1. 远程工具链支持:CLion 支持通过 SSH 连接到远程 Ubuntu 服务器,让开发者可以在本地机器上使用 IDE,而实际的编译和运行则在远程服务器上完成。

  2. 代码编辑和调试:在 CLion 中可以直接编辑远程服务器上的代码,并通过其强大的代码分析和重构工具提高开发效率。同时,CLion 还支持远程调试功能,可以在本地 IDE 中调试远程应用。

  3. CMake 项目支持:CLion 原生支持 CMake,这是许多 C/C++ 项目的构建工具。你可以轻松配置远程项目的构建环境,进行编译和生成。

  4. 版本控制集成:CLion 集成了 Git、SVN 等版本控制工具,方便开发者在远程项目中进行版本管理和协作。

  5. 智能补全和提示:CLion 提供的智能代码补全、代码导航和文档查看功能可以提高开发效率,即使是在远程开发的情况下。

  6. 终端和工具窗口:CLion 具备内置终端,可以方便地在 IDE 内使用命令行工具,与远程开发环境进行交互。

通过这些功能,使得CLion成为我们远程开发Linux的首选IDE。

2.所使用的Ubuntu介绍

本实验所使用的是加载了qt环境的14.0的乌班图版本,具体加载qt环境就不多描述,这里仅仅提供CLion远程开发的连接以及运行出helloworld文字框。

3.CLion远程开发连接步骤

     1)打开图片中的设置(Setting)

2)然后在构建、执行、部署中,进入工具链,后点击加号(我这里已经创建了,不做参考)

3)选择远程主机

4)在按照图中点击

5)点击加号后,会出现图中所示界面

6)这里的主机填虚拟机ifconfig后所示的IP地址

用户名与密码是登录入该乌班图界面的密码。配置好密码后,测试链接。

7)测试链接成功后,就是下图状态,还有如果CMake报错,显示远程开发cmake找不到,我这里是因为换了一个cmake-3.0.1,把之前的内容删除后填入cmake,就会自动检测,成功之后就可以继续使用了。

8)之后在部署里继续创建SFTP文件

9)此时可以通过下图的步骤选择之前已经链接好的SSH,测试。

10)测试成功后,进入映射

10)本地路径就是本机Windows所在的路径,而部署路径是在Linux里面,我们要编译和运行的文件都在处在部署路径里的Linux文件执行。

11)完成以上步骤之后,我们已经完成了80%的任务了,接下来就是打开CLion终端中的本地

注意:远程开发一定要在“本地”编译,我试了一下,在我图中的csgec@xxxxxxxx中找不到映射的文件

12)输入ssh [账号]@[主机ip],到这里我们的远程开发的连接板块已经完成,接下来的就是将minigui的开发文件helloworld通过CLion在ubuntu上进行上传并编译

4.helloworld界面编译

(最终形式)

1)首先创建一个helloworld.cpp文件(注意:我这里只创建了一个C++类),然后将一下代码复制

到该.cpp文件中。

注意:网上的helloworld远程开发的代码有一行多余的#include <minigui/mywindow.h>,我这里完全用不到,还给我报错,我直接删除了。

#include <stdio.h>
#include <string.h>
/*以上为包含标准库*/
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
/*以上为包含MiniGUI库*/
#define IDC_CTRL1 100   /*定义一个控件当然你也可以不需要它*/
int InitWindow(HWND hWnd); /*自定义一个窗口初始化函数,也可以不需要它而直接在消息处理中*/
/*进入消息循环中*/
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    switch (message) {
        case MSG_CREATE:
/*当窗口创建时该消息产生,可以在这里尽心窗口初始化,比如添加控件*/
            InitWindow(hWnd);
            break;
        case MSG_PAINT:       /*当绘制窗口时该消息产生,您可以添加些绘图函数,“Hello world ”就是在这里实现。*/
            hdc = BeginPaint (hWnd);//得到绘图设备
            TextOut (hdc, 125, 50, "hell world");//输出字符
            EndPaint (hWnd, hdc);//结束绘图
            return 0;
        case MSG_CLOSE://当窗口关闭时该消息产生
            DestroyMainWindow (hWnd);//注销窗口
            PostQuitMessage (hWnd);
            return 0;
    }
    return DefaultMainWinProc(hWnd, message, wParam, lParam);//未处理的函数在此默认处理
}
int MiniGUIMain (int argc, const char* argv[])//main函数对应Windows的WinMain和c中main
{
    MSG Msg;//定义消息
    HWND hMainWnd;//生成主窗口句柄
    MAINWINCREATE CreateInfo;//定义主窗口结构
#ifdef _LITE_VERSION//预处理:判断是否Lite版本
    SetDesktopRect(0, 0, 1024, 768);
#endif
    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;//设置主窗口风格
    CreateInfo.dwExStyle = WS_EX_NONE;//设置主窗口扩展风格
    CreateInfo.spCaption = "First App";//设置主窗口标题
    CreateInfo.hMenu = 0; //设置主窗口菜单
    CreateInfo.hCursor = GetSystemCursor(0); //设置主窗口鼠标光标
    CreateInfo.hIcon = 0; //设置主窗口图标
    CreateInfo.MainWindowProc = HelloWinProc; //设置主窗口消息处理函数过程
    CreateInfo.lx = 0; //设置主窗口位置x坐标
    CreateInfo.ty = 0; //设置主窗口位置y坐标
    CreateInfo.rx = 320; //设置主窗口宽度
    CreateInfo.by = 240; //设置主窗口高度
    CreateInfo.iBkColor = COLOR_lightwhite; //设置主窗口客户区背景色
    CreateInfo.dwAddData = 0; //设置主窗口的附加数据,通常不需要
    CreateInfo.hHosting = HWND_DESKTOP; //设置主窗口的托管窗口,通常为桌面DESKTOP

    hMainWnd = CreateMainWindow (&CreateInfo);//创建主窗口

    if (hMainWnd == HWND_INVALID)//失败则退出
        return -1;
    ShowWindow(hMainWnd, SW_SHOWNORMAL);//显示主窗口
    while (GetMessage(&Msg, hMainWnd)) {//进入消息处理
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    MainWindowThreadCleanup (hMainWnd);
    return 0;
}
int InitWindow(HWND hWnd)//自定义的初始化窗口函数,在MSG_CREATE处理中调用,
{
    static HWND hChildWnd1;//定义控件的窗口句柄,任何控件都是窗口
    hChildWnd1=CreateWindow("BUTTON","OK",WS_CHILD|WS_VISIBLE,IDC_CTRL1,200,180,40,25,hWnd,0);
//建立一个标题为“OK”的按钮
    return 0;
}
#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif

2)复制完之后,会出现由于没有相关的编译库而出现的红色警告,解决方法是复制完代码后点击进入CMakeLists.txt,并将下图中标红的代码部分进行复制或根据自己的创建情况进行微量改写。

注意:这里千万不能错,但凡有依赖库报错都可能是这个地方的问题,需要自己检查。

一下是该CMakeLists.txt代码源文件

cmake_minimum_required(VERSION 2.8 )
project(text5)

set(CMAKE_CXX_STANDARD 11)
set(MINIGUI_DIR /usr/local)

add_executable(text5 main.cpp)

include_directories(${MINIGUI_DIR}/include)
link_directories(${MINIGUI_DIR}/lib)

add_executable(helloworld helloworld.cpp)

find_package(Threads REQUIRED)

target_link_libraries(helloworld PRIVATE ${MINIGUI_DIR}/lib/libminigui.a ${CMAKE_THREAD_LIBS_INIT})

3)将两个文件都复制修改完成之后,把所有文件上传ubuntu,步骤如下,点击选择远程开发即可完成传输。

4)所有程序完成后,在本地的终端中用cd命令将地址转换到映射的地址里,(注意:这里如果用CLion虚拟机终端跳转不了

5)跳转之后敲【cmake ./ 】 会进入编译状态,一般这里不会出现问题。成功标志如下:

6)【cmake ./】之后,进行【make】,如果没有问题就没有error出现,如果有error大概率是CMakeLists.txt出现问题,此时检查CMakeLists.txt是否有误。

这个是我之前的错误,找了好久就是CMakeLists.txt编写时出现问题。

出现这样的颜色画面就代表【make】成功了。

此时【ls】后我们就有了helloworld的项目程序

7)在打开Ubuntu虚拟机的终端,敲下【qvfb】,这是打开窗口的界面。

8)打开窗口后,按下列箭头点击configure。

9)调整如下配置:

10)在CLion本地终端中继续刚才的操作,执行【./helloworld】指令,就可以看到Linux界面跳出helloworld界面辣!

总结:

           用CLion来配置环境是我们用windows编译Linux的一种方法,还有一种wsl编译(这个没有过多了解),但第二种方法没有CLion远程开发好,CLion还可以代码自动补齐。进行环境链接配置的时候真的一步都不能错,本人就是例子,希望这篇文章能帮助到大家。

相关需要的文件连接

1.cmake下载

(这个博主cmake下载的快,但版本低,这里可以支持)

Ubuntu安装CMake的完整指南_ubuntu cmake-CSDN博客

2.文章所使用的ubuntu

我的版本是14.04的安装好QT的版本的,文件有8.56个G,太大放不了百度网盘,嗯,下次冲会员再补上吧,没办法。

3.文章所用的helloworld文件

在文章里面有,这里就不放了。

希望能帮助到大家!


http://www.kler.cn/news/361389.html

相关文章:

  • AI大模型平台详解与AI创作示范
  • 【MySQL】入门篇—基本数据类型:NULL值的概念
  • 管理篇(顶级思维模型(31个))(待做)
  • 「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
  • YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
  • 数据清洗(脚本)
  • 深度学习(二)框架与工具:开启智能未来之门(2/10)
  • 【计网笔记】物理层
  • 每天坚持学英语,多久能说流利呢?
  • 闯关leetcode——190. Reverse Bits
  • Github 2024-10-20 php开源项目日报Top10
  • 解锁文本数据可视化的无限可能:Wordcloud库全解析
  • 微服务接口测试的通用注意点
  • 【C++】string类(2)
  • Construmart借力SNP全面升级SAP S/4HANA和 SAP CAR 改进零售业务流程
  • Android 应用包名的定义 pm list packages查询的包名
  • SQL语句高级查询(适用于新手)
  • 这几次比赛题解
  • UniHttp框架直接对接第三方Http接口
  • JavaGuide (8)
  • MySQL之CRUD(下)
  • vue中加载GLB模型,计算模型的长宽高、绘制模型的边框线
  • Vue93 vue3 watch监视ref属性的说明
  • 记录:网鼎杯2024赛前热身WEB01
  • Cocos引擎
  • 十四、MySQL事务日志