项目生成两个文件
CMakeList.txt
cmake_minimum_required(VERSION 3.22)
project(demo1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5 COMPONENTS
Core
Gui
Widgets
REQUIRED)
add_executable(demo1 main.cpp)
target_link_libraries(demo1
Qt5::Core
Qt5::Gui
Qt5::Widgets
)
if (WIN32)
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
endif ()
endif ()
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$/plugins/platforms/")
endif ()
foreach (QT_LIB Core Gui Widgets)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"
"$")
endforeach (QT_LIB)
endif ()
main.cpp
#include
#include
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QPushButton button("Hello world!", nullptr);
button.resize(200, 100);
button.show();
return QApplication::exec();
}
注意此时编译 是失败的。
D:\Qt\Qt5.12.12\5.12.12\msvc2017_64\bin
路径设置到环境变量)删除系统判断文件(这个文件好像写的不对)
if (WIN32)
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
endif ()
endif ()
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$/plugins/platforms/")
endif ()
foreach (QT_LIB Core Gui Widgets)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll"
"$")
endforeach (QT_LIB)
endif ()
这个删除掉
添加QT路径set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
将上述的路径改为自己的QT路径
cmake_minimum_required(VERSION 3.22)
project(demo1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#设置QT的路径
set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
find_package(Qt5 COMPONENTS
Core
Gui
Widgets
REQUIRED)
add_executable(demo1 main.cpp)
target_link_libraries(demo1
Qt5::Core
Qt5::Gui
Qt5::Widgets
)
修改后的CMakelist.txt文件
【已完成】
运行代码
点击运行代码(如果不报错的话)
显示结果
退出程序
X
可退出 这个是会正常退出设置
中点开工具链
+
tool
下的mingw路径修改CMakelist.txt文件
将set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
注释
相同位置加入set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64")
修改后的CMakeList.txt
cmake_minimum_required(VERSION 3.22)
project(demo1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#设置QT的路径
#set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64")
find_package(Qt5 COMPONENTS
Core
Gui
Widgets
REQUIRED)
add_executable(demo1 main.cpp)
target_link_libraries(demo1
Qt5::Core
Qt5::Gui
Qt5::Widgets
)
配置编译器环境路径
编辑配置
cmake应用程序
环境变量
为:PATH=D:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin
自己的QT的环境mingw的位置创建文件夹
新建UI
main.cpp修改如下
#include
#include "headers/windowtest.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
windowTest w;
w.show();
return QApplication::exec();
}
windowtest.cpp的头文件#include "ui_windowTest.h"
修改为#include "Forms/ui_windowTest.h"
修改后的文件
#include "headers/windowtest.h"
#include "Forms/ui_windowTest.h"
windowTest::windowTest(QWidget *parent) :
QWidget(parent), ui(new Ui::windowTest) {
ui->setupUi(this);
}
windowTest::~windowTest() {
delete ui;
}
点击运行
cmake小小优化
cmake_minimum_required(VERSION 3.22)
project(clionTest)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
#set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64")
set(CMAKE_PREFIX_PATH "D:/Qt/Qt5.12.12/5.12.12/mingw73_64")
#set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5")
#set(QT5_DIR "D:/Qt/Qt5.12.12/5.12.12/mingw73_64/lib/cmake/Qt5")
find_package(Qt5 COMPONENTS
Core
Gui
Widgets
Network
REQUIRED)
include_directories(
${PROJECT_BINARY_DIR}/include
${PROJECT_BINARY_DIR}/Source/headers
)
# 这里添加 头文件目录
#include_directories(src/subWidget)
# 包含 ui.h
#include_directories("${CMAKE_BINARY_DIR}/${PROJECT_NAME}_autogen/include")
#递归查找源文件
#LIST_DIRECTORIES false 只输出文件,不需要文件夹 RELATIVE代表只要相对路径
file(GLOB_RECURSE SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} LIST_DIRECTORIES false Source/*.cpp Source/Forms/*.ui Source/headers/*.h)
#添加额外的 源文件 例如资源文件等
#LIST(APPEND SRCS res.qrc)
#add_executable(clionTest
# Source/main.cpp
# Source/mainwindow.cpp
# Source/headers/mainwindow.h
# Source/Forms/mainwindow.ui
# Source/testmainwindow.cpp
# Source/headers/testmainwindow.h
# Source/Forms/testmainwindow.ui)
#message(${SRCS})
message(STATUS "Enter cmake ${SRCS}")
add_executable(${PROJECT_NAME} ${SRCS} )
target_link_libraries(clionTest
Qt5::Core
Qt5::Gui
Qt5::Widgets
Qt5::Network
)
file(GLOB_RECURSE SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} LIST_DIRECTORIES false Source/*.cpp Source/Forms/*.ui Source/headers/*.h)
message(STATUS "Enter cmake ${SRCS}")
add_executable(${PROJECT_NAME} ${SRCS} )
add_executable(demo1 Sources/main.cpp Sources/windowtest.cpp Sources/headers/windowtest.h Sources/Forms/windowtest.ui)
这句手写文件后续可能会有其他qrc文件的寻找方法 未完待续…