clion配置Linux远程开发环境–开发QT桌面软件
环境准备
● 首先准备一台windows 电脑
● 准备一台ubuntu电脑 win11使用WSL2配置Ubuntu 环境_turbolove的博客-CSDN博客ubuntu需要有正常的开发环境,需要有QT环境
● 保证两台电脑可以正常通信
● CLion windows
● 使用MobaXterm ssh远程登录Ubuntu 20.04_turbolove的博客-CSDN博客
开始配置和问题
接下来可以开始配置clion的远程开发环境
1.配置Clion工具链
2.配置对应的CMake,工具链选择远程主机
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(); }
在运行的时候会报如下错误,这个是因为图像回显问题导致的,这个时候需要按照以下步骤解决
1.MobaXterm远程连接上主机,然后输入 echo $DIAPLAY
2.将clion的回显配置成对应的ip
3.我们看到,可以正常输出和调试。