需要一个CMakeLists.txt作为你的模板
cmake_minimum_required(VERSION 3.0)
project(test)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
aux_source_directory(./src SRC_LIST)
find_package(Qt5 COMPONENTS Core Widgets Gui Sql Xml Network REQUIRED)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Sql Qt5::Network)
创建一个build文件夹,在里面使用指令
cmake ..
make
执行生成的可执行文件,成品如下图
后续只需要对src下的文件做出改变,其余不用动
在这次中,卡点的其实是两个。
一个是find_package()的库找不到。
qt在找库时默认会去/usr/lib/cmake中去查找对应的.cmake文件,如果没有就会报错
解决办法:
以这个问题举例,去下载qt5serialbus源码,下载下来后解压,进去后创建build文件夹qmake一下
,make出来源码,然后将里面的代码make install,问题解决
qmake ..
make install
其次是cmake在链接时
提示你undefined reference to 'vtable for widget',问题发生在链接阶段而不是编译阶段,原因并不在于.cpp或者.h文件问题,而是在cmake中没有加set(CMAKE_AUTOMOC ON)
这句话主要作用就是会自动生成链接你的moc文件
为什么选用vscode而不是qtcreator呢?vscode从底部一步一步搭起来,我对我的项目知根知底,哪里出错了一目了然。而qtcreator隐瞒了太多细节了,用vscode写qt让我对底层,cmake了解有很多帮助