其中dockWidget为主程序入口,build为cmake生成的文件
其余为生成的动态Dll生成程序
除去build 每个文件夹子目录下均有对应的Cmakelists.txt
dll下的CmakeLists(以TreeViewDll为例)
set
(CMAKE_INCLUDE_CURRENT_DIR
ON
)
set
(CMAKE_AUTOMOC
ON
)
add_definitions
(
"-DLIBHELLO_BUILD"
)
set
(CMAKE_AUTOMOC
ON
)
find_package
(Qt5Widgets)
find_package
(Qt5Core)
find_package
(Qt5Gui)
find_package
(Qt5Xml)
set
(SRC_FILES delegate.cpp treeviewdll.cpp treeview.cpp)
set
(HEAD_FILES delegate.h treeviewdll.h treeviewdll_global.h treeview.h)
add_library
(treeDll SHARED
${SRC_FILES}
${HEAD_FILES}
)
set
(LIBRARY_OUTPUT_PATH
${PROJECT_BINARY_DIR}
/bin)
set_target_properties
(treeDll PROPERTIES OUTPUT_NAME
"treeDll"
)
target_link_libraries
(
treeDll
Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Xml
主程序入口dockWidget如下
对应CmakeList
include_directories(${PROJECT_SOURCE_DIR}/treeDll)
include_directories(${PROJECT_SOURCE_DIR}/splitterDll)
include_directories(${PROJECT_SOURCE_DIR}/dllManager)
include_directories(${PROJECT_SOURCE_DIR}/btn_infoDll)
include_directories(${PROJECT_SOURCE_DIR}/tabDll)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)
find_package(Qt5Xml)
FILE(GLOB SRC_FILES "./*.cpp")
FILE(GLOB HEAD_FILES "./*.h")
FILE(GLOB RES "./*.qrc")
QT5_ADD_RESOURCES(RES_RCC ${RES})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Bin)
add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RES_RCC})
target_link_libraries(${PROJECT_NAME}
Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Xml
treeDll
splitterDll
dllManager
在Cmake中编译构建项目:
编译完成后,build文件中 vs2013打开构建的sln程序
用vs构建项目
对应的bin/debug目录下存放的是lib/dll/exe 文件
dockWidget中存放的是 xml ini等
CMake编译完成~~
./Qt持久性对象进行序列化.pdf
./Qt新渲染底层Scene Graph研究3.pdf
./Qt模块化笔记之Qt_Quick--用QQuickImageProvider给Image组件添加图片.pdf
./QT中emit,signal,slot.pdf
./Q_PROPERTY.pdf
./QT高级编程_chs.pdf
./Qt动画框架详解
./RenderToTextureExamples.zip
./QT中文帮助文档.chm
./qt3d-intro.pdf
./Qt_Quick中文手册.pdf
此时可以关闭IDE,使用cmake-gui构建,再借助VS生成动态库,或者直接使用IDE的构建编译功能。这一步必须确保使用的构建套件与另一项目使用的完全一致,否则会出现undifined reference _imp的报错。使用Qt creator或其他ide新建一个类,比如testlib,在类中写点东西,以确定是否调用成功。找一个地方新建文件夹,命名为include之类的,将前面库的头文件放进去。此时就能正常使用库了,依旧需要注意确保构建套件与生成库时的套件完全一致。
转载:https://www.hahack.com/codes/cmake
为什么需要CMake
如果你一直在windows平台上开发,使用最多的可能就是VS的开发环境,它已经集成了全套的开发环境包括构建编译等。你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须
网上看到过不少文章,但翻来翻去网上的文章讲得都很浅显,而且有的没有到达自己想要的目的,所以自己动手写了一个。实现的要求有:配置一个EXE工程,其他若干DLL工程。每个工程下自动加载该文件夹的所有.h,.cpp,.ui文件,而不是每次添加文件都需要在CMakelists.txt文件中进行修改。我工程的目录结构如下:记得把Qt安装目录下的Qt所有dll目录加到环境变量中。然后我们直接上CMakelis...
使用Visual Studio构建Qt工程的方法有很多种,可以使用Visual Studio自带的功能手动创建配置工程,也可以创建pro文件,然后通过VS的Qt插件导入进行创建。还有一种方式是通过CMake进行管理创建,需要注意的是Qt5和Qt4有区别,这里只讲Qt5。
#设置cmake版本号
cmake_minimum_required(VERSION 3.4.0)
#设置工程名称...
#打开moc 自动编译
#moc主要用途 是将有QTOBJECT等宏的文件 展开生成编译器能识别的cpp文件 名称为moc_xxx.cpp
#moc 主要是自动调用了qt库目录bin 下的moc工具命令
SET(CMAKE_AUTOMOC ON)
#打开ui文件自动编译
#有窗口设计文件XXX.ui 是需要先进行uic编译生成一个ui_xxx.h的文件
SET(CMAKE_AUTOUIC ON)
#rcc 主要是用来 将.qrc资源文件编译成 xx.c
作为实习内容,要通过学会用CMake部署文件到git,方便公司进行项目管理。
今天CMake生成已有的QT程序的项目时,遇到几个报错的问题,查了很久都没找到解决我的问题的办法。
其中一个是关于Qt5Cored的报错,后来想着可能是因为我装了太多的构建套件(我之前装了VS15、VS17等等差不多10个),然后索性重装,重装时只装了VS2015的32位和64位以及MinGW重装之后,然后用VS2015的64位构建套件运行就没啥问题了。
对了,重装QT后要添加环境变量的,不添加的话,会报一堆的.dll的
最近项目要用qt,因为初学没有经验,遇到些小问题常常没什么头绪,也查不到解决方法,刚刚还因为低端错误耽误了群里一位朋友的时间。决定以后如果遇到类似小问题就记录下来,也方便初学者少走弯路了。
首先,qt动态编译发布程序一般是在Qtcreater中编译出release版本...
QMake是一个通过编译Pro文件自动生成Makefile文件的工具。
这里扩展一下make、makefile、cmake、CMakeLists.txt、qmake等之间的关系:
首先,当我们初学helloworld项目的时候,一般是用gcc命令进行编译的,gcc是GNU Compiler Collection(GNU编译器套件),可以理解为编译器。
当项目比较复杂,需要编译的文件比较多时,再用gcc命令逐个编译就不现实了,所以就衍生出了makefile文件和make工具。
链接:https://pan.baidu.com/s/1Xr2wP0g1UV_L6xpP9cJkxA?修改代码时在左边的项目看找不到cpp和h文件,要去src文件夹中打开。进入build文件夹,打开vs项目。此时会多出来一个build文件夹。