最近在学习qt,做了一个简易的植物大战僵尸小游戏,qt creator的ui比较单调,vs的一个工程还很占存储,想着试试用用clion,以下为我个人环境配置经验总结。
一、环境配置
将qt编译工具链添加到windows环境变量,打开Windows资源管理器
添加如下环境变量
添加成功后打开控制台输入gcc -v应该会有如下信息:
二、配置clion编译工具链
打开clion设置,找到下图位置
将工具集路径选为qt安装的路径,之后的Make、C编译器、C++编译器会自动捆绑,我自己配置的时候不知道为什么调试器用的还是内置的,所以手动换一下路径
配置好之后将该工具链设置为默认。
三、创建新项目
clion的创建新项目之后,我把我的源文件导入之后,最后程序链接的时候无法找到信号与槽的虚表,尝试了很多方法也没有解决,最后决定用Qt Creator创建cmake工程再导入进clion中。
创建qt新项目,构建系统这步选择CMake
创建好之后不知道为什么Qt Creator只能看到一个CMakeLists文件
四、Clion配置工程
创建一个C++可执行文件项目
将刚刚qt创建的工程文件,直接拖进该工程并覆盖。
这个工程应该是可以直接运行的
接着把我写的植物大战僵尸小游戏资源导入,导入后工程大概是这个样子
多了4个文件夹以及一个qrc文件
接着修改CMakeLists.txt文件,这个是最初qt creator创建的CMakeLists文件
cmake_minimum_required(VERSION 3.5)
project(test LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
if(ANDROID)
add_library(test SHARED
main.cpp
widget.cpp
widget.h
widget.ui
)
else()
add_executable(test
main.cpp
widget.cpp
widget.h
widget.ui
)
endif()
target_link_libraries(test PRIVATE Qt5::Widgets)
这是我修改之后的
cmake_minimum_required(VERSION 3.5)
project(PlantVsZombie LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets Gui Core Multimedia REQUIRED)
include_directories (${PROJECT_SOURCE_DIR}/inc)
qt5_add_resources(QML_QRC source.qrc)
aux_source_directory(src SRC_LIST)
set(PROJECT_SOURCE ${SRC_LIST} ${QML_QRC})
if(ANDROID)
add_library(${PROJECT_NAME} SHARED
main.cpp
widget.cpp
inc/widget.h
widget.ui
${PROJECT_SOURCE}
)
else()
add_executable(${PROJECT_NAME} WIN32
main.cpp
widget.cpp
inc/widget.h
widget.ui
${PROJECT_SOURCE}
)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Widgets Qt5::Gui Qt5::Multimedia)
增加了头文件源文件及依赖库寻找。
直接构建工程
构建成功!
qt创建的main.cpp、widget.cpp、widget.ui尽量不要更换路径,不然链接的时候会有莫名其妙的bug。
Clion还有很多插件可以用,我这里用了汉化和One Dark theme主题,还有gitee插件可以把代码放进gitee仓库。