qt cmake 创建外部项目 静态编译调用第三方库 外部构建CMAKE工程

      • 1. 默认创建一个cmake工程
      • 2. cmake增加qt支持
      • 3. 引入自己创建的外部项目,比如QCustomPlot
      • 4. 引入完整的第三方工程,比如 QuaZIP

??有一些比较小的第三方库或者自己封装的常用库,把他们加进自己工程会造成比较繁琐,而且代码格式/规范跟现有软件不一样看着很别扭。要是把他们完全封装成.so或者lib,说不定什么时候还会需要修改。这时候就很需要搞一个第三方的引用库。

??这里用qt很常用的两个类做例子 QCustomPlotQuaZIP。一个属于完整的外部工程,一个可以算作自己构建的外部项目。这两个如果直接加到自己项目里,会使项目变复杂而且那俩玩意规范跟自己写的肯定不一样。感觉把他们放到第三方库是最合适的选择。

??QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线、动态曲线、多重坐标曲线,柱状图,蜡烛图等。只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用。

??QuaZIP是Gilles Vollant的ZIP / UNZIP软件包(又名Minizip)的C ++包装程序,它使用了Trolltech的Qt库。如果您需要使用QIODevice API将文件写入ZIP存档或从其中读取文件,则QuaZIP正是您需要的工具。

??如果觉得下边这个工程有用的话,下载:http://118.25.63.144/temporary/3rdparty_test.zip

1. 默认创建一个cmake工程

??一路默认创建就可以了。
在这里插入图片描述

2. cmake增加qt支持

??按照下边修改cmake。
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cmake_minimum_required(VERSION 3.1)

project(untitled)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 14)
option(BUILD_SHARED_LIBS "" OFF)

find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Sql Test Xml Network Concurrent)
find_package(Qt5LinguistTools)


add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(
    ${PROJECT_NAME}
    Qt5::Core
    Qt5::Gui
    Qt5::Widgets
    Qt5::Sql
    Qt5::Xml
    Qt5::Network
    Qt5::Concurrent)

3. 引入自己创建的外部项目,比如QCustomPlot

??工程目录新建一个文件夹 3rdparty 用来存放第三方库或者自己写的外部项目。
在这里插入图片描述
?? 修改两个CMakeList.txt
在这里插入图片描述

1
2
3
4
5
6
7
8
if( WIN32 )
    add_definitions( -DUNICODE )
endif()
add_library( qcustomplot STATIC
    src/qcustomplot.cpp
    src/qcustomplot.h)
set_target_properties( qcustomplot PROPERTIES AUTOMOC TRUE )
target_link_libraries( qcustomplot Qt5::Widgets Qt5::Network )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cmake_minimum_required(VERSION 3.1)

project(untitled)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 14)
option(BUILD_SHARED_LIBS "" OFF)

find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Sql Test Xml Network Concurrent)
find_package(Qt5LinguistTools)

add_subdirectory(3rdparty/qcustomplot)
include_directories(3rdparty/qcustomplot/src)


add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(
    ${PROJECT_NAME}
    Qt5::Core
    Qt5::Gui
    Qt5::Widgets
    Qt5::Sql
    Qt5::Xml
    Qt5::Network
    Qt5::Concurrent)

target_link_libraries(# 封装到项目中第三方库 lib文件
    ${PROJECT_NAME}
    qcustomplot)

4. 引入完整的第三方工程,比如 QuaZIP

??下载完整的第三方库,并放进自己工程下的3rdparty。
在这里插入图片描述
??修改cmake。

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
cmake_minimum_required(VERSION 3.1)

project(untitled)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 14)
option(BUILD_SHARED_LIBS "" OFF)

find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets Sql Test Xml Network Concurrent)
find_package(Qt5LinguistTools)

add_subdirectory(3rdparty/qcustomplot)
include_directories(3rdparty/qcustomplot/src)

if(WIN32)
    add_subdirectory(3rdparty/quazip-0.8.1-win)
    include_directories(3rdparty/quazip-0.8.1-win/quazip)
else()
    add_subdirectory(3rdparty/quazip-0.8.1)
    include_directories(3rdparty/quazip-0.8.1/quazip)
endif()

add_executable(${PROJECT_NAME} "main.cpp")

target_link_libraries(
    ${PROJECT_NAME}
    Qt5::Core
    Qt5::Gui
    Qt5::Widgets
    Qt5::Sql
    Qt5::Xml
    Qt5::Network
    Qt5::Concurrent)

target_link_libraries(
    ${PROJECT_NAME}
    qcustomplot
    quazip)