CmakeTest文件夹下 有如下结构:
最外层CMakeLists.txt文件
project(MainAPP)
cmake_minimum_required(VERSION 3.1.3)
add_subdirectory(splitterDll)
add_subdirectory(treeViewDll)
add_subdirectory(dllManager)
add_subdirectory(dockWeiget)
add_subdirectory(btn_infoDll)
add_subdirectory(tabDll)
其中dockWidget为主程序入口,build为cmake生成的文件
其余为生成的动态Dll生成程序
除去build 每个文件夹子目录下均有对应的Cmakelists.txt
dll下的CmakeLists(以TreeViewDll为例)
#设置工程包含当前目录,非必须
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#设置自动生成moc文件,一定要设置
set(CMAKE_AUTOMOC ON)
add_definitions("-DLIBHELLO_BUILD")
#设置自动生成moc文件,一定要设置
set(CMAKE_AUTOMOC ON)
#查找需要的Qt库文件
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)
find_package(Qt5Xml)
#查找当前文件夹中的所有源代码文件,也可以通过Set命令将所有文件设置为一个变量
set(SRC_FILES delegate.cpp treeviewdll.cpp treeview.cpp)
#同理,查找当前文件夹中所有的头文件
set(HEAD_FILES delegate.h treeviewdll.h treeviewdll_global.h treeview.h)
#同理,查找当前文件夹中所有的ui文件
#FILE(GLOB UI_FILES "./*.ui")
#通过Ui文件生成对应的头文件,一定要添加
#qt5_wrap_ui(WRAP_FILES ${UI_FILES})
#添加资源文件
#set(RCC_FILES rcc.qrc)
#将ui文件和生成文件整理在一个文件夹中,非必须
#source_group("Ui" FILES ${UI_FILES} ${WRAP_FILES} )
#创建工程文件
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)
#设置自动生成moc文件,一定要设置
set(CMAKE_AUTOMOC ON)
#查找需要的Qt库文件
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)
find_package(Qt5Xml)
#查找当前文件夹中的所有源代码文件,也可以通过Set命令将所有文件设置为一个变量
FILE(GLOB SRC_FILES "./*.cpp")
#同理,查找当前文件夹中所有的头文件
FILE(GLOB HEAD_FILES "./*.h")
#同理,查找当前文件夹中所有的ui文件
#FILE(GLOB UI_FILES "./*.ui")
#通过Ui文件生成对应的头文件,一定要添加
#qt5_wrap_ui(WRAP_FILES ${UI_FILES})
#添加资源文件
FILE(GLOB RES "./*.qrc")
QT5_ADD_RESOURCES(RES_RCC ${RES})
#将ui文件和生成文件整理在一个文件夹中,非必须
#source_group("Ui" FILES ${UI_FILES} ${WRAP_FILES} )
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Bin)
#创建工程文件
add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RES_RCC})
#添加Qt5依赖项
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编译完成~~