clion配置Linux远程开发环境–开发QT桌面软件

简介: 接下来可以开始配置clion的远程开发环境1.配置Clion工具链

clion配置Linux远程开发环境–开发QT桌面软件


环境准备

●  首先准备一台windows 电脑


●  准备一台ubuntu电脑 win11使用WSL2配置Ubuntu 环境_turbolove的博客-CSDN博客ubuntu需要有正常的开发环境,需要有QT环境


●  保证两台电脑可以正常通信


●  CLion windows


●  使用MobaXterm ssh远程登录Ubuntu 20.04_turbolove的博客-CSDN博客


开始配置和问题

接下来可以开始配置clion的远程开发环境


1.配置Clion工具链

020b4b14084045a48d12ad837582f1ef.png

2.配置对应的CMake,工具链选择远程主机

b15684d1a8344b00845bb97b8ee23bbd.png

3.添加项目,并且编写基础代码


CMakeLists.txt

cmake_minimum_required(VERSION 3.19)
project(LinuxTest)
#指定C++标准
set(CMAKE_CXX_STANDARD 17)
#自动编译QT文件
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#开启包含当前编译目录
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_PREFIX_PATH "/opt/Qt/5.15.2/gcc_64")
#指定QT版本和对应的库
set(QT_VERSION 5)
set(REQUIRED_LIBS Core Gui Widgets)
set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets)
#寻找QT库
find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
#自动查找头文件路径函数
macro(FIND_INCLUDE_DIR result curdir)                                        #定义函数,2个参数:存放结果result;指定路径curdir;
    file(GLOB_RECURSE children "${curdir}/*.hpp" "${curdir}/*.h" )           #遍历获取{curdir}中*.hpp和*.h文件列表
    file(GLOB SOURCE_INCLUDE ${children} )                                   #将文件放入 SOURCE_INCLUDE 中
    set(dirlist "")                                                          #定义dirlist中间变量,并初始化
    foreach(child ${children})                                               #for循环
        string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})              #字符串替换,用/前的字符替换/*h
        if(IS_D8IRECTORY ${LIB_NAME})                                         #判断是否为路径
            list (FIND dirlist ${LIB_NAME} list_index)                       #判断dirlist是否含有${LIB_NAME}
            if(${list_index} LESS 0)
                LIST(APPEND dirlist ${LIB_NAME})                             #将合法的路径加入dirlist变量中
            else()
            endif()                                                          #结束判断
        endif()
    endforeach()                                                             #结束for循环
    set(${result} ${dirlist})                                                #dirlist结果放入result变量中
endmacro()
#自动查找源文件路径函数
macro(FIND_SRC_DIR result curdir)
    file(GLOB_RECURSE children "${curdir}/*.cpp" "${curdir}/*.cc")
    file(GLOB SOURCE_SRC ${children} )
    set(dirlist "")
    foreach(child ${children})
        string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})
        if(IS_DIRECTORY ${LIB_NAME})
            list (FIND dirlist ${LIB_NAME} list_index)
            if(${list_index} LESS 0)
                LIST(APPEND dirlist ${LIB_NAME})
            else()
            endif()
        endif()
    endforeach()
    set(${result} ${dirlist})
endmacro()
#调用函数,指定参数
#自动查找头文件路径函数
macro(FIND_UI_DIR result curdir)                                        #定义函数,2个参数:存放结果result;指定路径curdir;
    file(GLOB_RECURSE children "${curdir}/*.ui")           #遍历获取{curdir}中*.hpp和*.h文件列表
    file(GLOB SOURCE_UI ${children} )                                   #将文件放入 SOURCE_INCLUDE 中
    set(dirlist "")                                                          #定义dirlist中间变量,并初始化
    foreach(child ${children})                                               #for循环
        string(REGEX REPLACE "(.*)/.*" "\\1" LIB_NAME ${child})              #字符串替换,用/前的字符替换/*h
        if(IS_DIRECTORY ${LIB_NAME})                                         #判断是否为路径
            list (FIND dirlist ${LIB_NAME} list_index)                       #判断dirlist是否含有${LIB_NAME}
            if(${list_index} LESS 0)
                LIST(APPEND dirlist ${LIB_NAME})                             #将合法的路径加入dirlist变量中
            else()
            endif()                                                          #结束判断
        endif()
    endforeach()                                                             #结束for循环
    set(${result} ${dirlist})                                                #dirlist结果放入result变量中
endmacro()
FIND_SRC_DIR(SRC_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
FIND_INCLUDE_DIR(INCLUDE_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
FIND_UI_DIR(UI_DIR_LIST ${PROJECT_SOURCE_DIR}/src)
#将INCLUDE_DIR_LIST中路径列表加入工程,包括第三方库的头文件路径
include_directories(
        ${INCLUDE_DIR_LIST}                                            #INCLUDE_DIR_LIST路径列表加入工程
)
# 指定格式为utf-8
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
#使用指定的源文件来生成目标可执行文件
add_executable(${PROJECT_NAME} main.cpp ${SOURCE_INCLUDE} ${SOURCE_SRC}  ${SOURCE_UI} )
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBS_QUALIFIED})

main.cpp

#include <QApplication>
#include <QPushButton>
#include <QDebug>
int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    QPushButton button("Hello World!");
    button.show();
    return QApplication::exec();
}

在运行的时候会报如下错误,这个是因为图像回显问题导致的,这个时候需要按照以下步骤解决

0843ca359913425ab2b4677f7509490d.png

1.MobaXterm远程连接上主机,然后输入 echo $DIAPLAY

1ca9dc0b040443d09fc6e1f87b0b95c0.png

2.将clion的回显配置成对应的ip

9b2aff33e1fa4f4f84e9b1e7ea8f169d.png

3.我们看到,可以正常输出和调试。

07a7218e4ffc4b37a83d82aa67931dfd.png

目录
相关文章
|
16天前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
185 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
5月前
|
Oracle 关系型数据库 Linux
VirtualBox 7.1.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件
VirtualBox 7.1.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件
320 0
VirtualBox 7.1.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件
|
4月前
|
Linux API iOS开发
Blender 4.5 (Linux, macOS, Windows) - 开源 3D 创意软件 (渲染 建模 雕刻)
Blender 4.5 (Linux, macOS, Windows) - 开源 3D 创意软件 (渲染 建模 雕刻)
199 1
Blender 4.5 (Linux, macOS, Windows) - 开源 3D 创意软件 (渲染 建模 雕刻)
|
3月前
|
Ubuntu 安全 小程序
linux|ubuntu.v18.10版本即将发布,linux桌面让您动心
如果你使用闭源系统,那永远也就别想了!有了这样的需求,也许最终将linux带到人类大众通用市场的是我们中国!
87 0
|
3月前
|
Ubuntu Linux 图形学
Linux学习之Linux桌面系统有哪些?
Cinnamon:与MATE类似,Cinnamon 拥有 GNOME 和 Unity 等其它桌面环境所没有的种种功能,是高度可定制的桌面环境,不需要任何外部插件、窗口组件和调整工具来定制桌面。
165 0
|
3月前
|
Linux iOS开发 开发者
Linux桌面版,又被喷了!
罗马不是一天建成的,想要拥有更多的大众用户,在市场份额突破个位数,就需要虚心倾听他们的声音,学习赛道中的优秀者。
|
3月前
|
Ubuntu Unix Linux
24款Linux桌面,有没有你的最爱?
如果您不知所措,请记住台式机是可选的。除了发行版附带的内容外,没有其他尝试的义务。许多Linux的高级用户对Linux发行版摆设的任何桌面都是满意的。重要的是要获得可与您的计算机一起使用的Linux安装,并花一些时间来学习它的工作方式。最终,所有台式机都只能做同一件事:帮助您组织和管理重要数据。但是,如果您已经了解了有关默认桌面的所有知识,那么现在您可以在周末做多种尝试,并为您最喜欢的一款Linux桌面投上一票。
|
4月前
|
C语言 图形学 Windows
Windows下安装和配置GTK4(基于CLion)
本文介绍了作者选择GTK作为C语言图形库的原因,包括代码简洁、控件丰富和界面美观,并分享了在Windows环境下通过MSYS2安装GTK4及在CLion中配置开发环境的详细步骤。
487 0
|
4月前
|
Linux iOS开发 MacOS
Krita 5.2.10 (Linux, macOS, Windows) - 开源免费绘画软件
Krita 5.2.10 (Linux, macOS, Windows) - 开源免费绘画软件
183 0
Krita 5.2.10 (Linux, macOS, Windows) - 开源免费绘画软件