qt c++借助开源的.pro工程文件解读.pro文件中的各项配置的含义

cpp 复制代码
#
#  Project to compile QCustomPlot as shared library (.so/.dll) from the amalgamated sources
#

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11
lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11

DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
TEMPLATE = lib
CONFIG += debug_and_release build_all
static {
  CONFIG += static
} else {
  CONFIG += shared
}

VERSION = 2.1.1

TARGET = qcustomplot
CONFIG(debug, debug|release) {
  TARGET = $$join(TARGET,,,d) # if compiling in debug mode, append a "d" to the library name
  QMAKE_TARGET_PRODUCT = "QCustomPlot (debug mode)"
  QMAKE_TARGET_DESCRIPTION = "Plotting library for Qt (debug mode)"
} else {
  QMAKE_TARGET_PRODUCT = "QCustomPlot"
  QMAKE_TARGET_DESCRIPTION = "Plotting library for Qt"
}
QMAKE_TARGET_COMPANY = "www.qcustomplot.com"
QMAKE_TARGET_COPYRIGHT = "Copyright (C) by Emanuel Eichhammer"

SOURCES += ../../qcustomplot.cpp
HEADERS += ../../qcustomplot.h
cpp 复制代码
QT += core gui
  • 指定项目依赖的Qt模块。这里添加了coregui模块,因为QCustomPlot需要基本的Qt核心功能和图形用户界面功能。
cpp 复制代码
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
  • 如果Qt的主版本号大于4(即Qt5或更高版本),则添加widgetsprintsupport模块。因为QCustomPlot使用了Qt的Widgets模块(用于绘图控件)和PrintSupport模块(用于打印支持)。
cpp 复制代码
greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11
lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11
  • 如果Qt版本大于4(即Qt5及以上),则配置项目使用C++11标准。
  • 如果Qt版本小于5(即Qt4),则通过编译器标志-std=c++11启用C++11支持。注意:这要求编译器支持C++11。-
cpp 复制代码
DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
  • 定义一个预处理器宏QCUSTOMPLOT_COMPILE_LIBRARY。这个宏在QCustomPlot的源代码中用于控制导出符号(如使用QCUSTOMPLOT_EXPORT宏),以便将类导出为库的公共API。
cpp 复制代码
TEMPLATE = lib

设置项目模板为lib,表示我们要构建一个库(而不是应用程序或其他类型)。

6 .

cpp 复制代码
CONFIG += debug_and_release build_all
  • debug_and_release:同时生成调试(debug)和发布(release)版本的库。
  • build_all:确保构建所有配置(即使当前被设置为只构建一种配置)。
cpp 复制代码
static {
  CONFIG += static
} else {
  CONFIG += shared
}
  • 这是一个条件判断:如果外部传递了static参数(例如在qmake命令行中指定CONFIG+=static),则配置为构建静态库(static);否则,构建共享库(shared)。
cpp 复制代码
VERSION = 2.1.1
  • 设置库的版本号为2.1.1。这个版本号通常用于生成库文件的文件名后缀(例如libqcustomplot.so.2.1.1)以及内部版本信息。
cpp 复制代码
TARGET = qcustomplot
  • 设置目标库的名称为qcustomplot。在Linux上,会生成libqcustomplot.so;在Windows上,会生成qcustomplot.dll
cpp 复制代码
CONFIG(debug, debug|release) {
  TARGET = $$join(TARGET,,,d) # if compiling in debug mode, append a "d" to the library name
  QMAKE_TARGET_PRODUCT = "QCustomPlot (debug mode)"
  QMAKE_TARGET_DESCRIPTION = "Plotting library for Qt (debug mode)"
} else {
  QMAKE_TARGET_PRODUCT = "QCustomPlot"
  QMAKE_TARGET_DESCRIPTION = "Plotting library for Qt"
}
  • 这段代码根据当前构建配置(debug或release)进行设置:
  • 如果是debug配置,将目标名称(TARGET)后面追加一个字母d(例如qcustomplotd),这样调试库和发布库可以共存。同时设置目标产品的名称和描述为带有"debug mode"的字符串。
  • 如果是release配置,则使用普通的目标名称,并设置普通的产品名称和描述。
  • QMAKE_TARGET_PRODUCTQMAKE_TARGET_DESCRIPTION用于在Windows中设置资源文件的属性(如文件描述),在Linux中通常没有作用。
cpp 复制代码
QMAKE_TARGET_COMPANY = "www.qcustomplot.com"
QMAKE_TARGET_COPYRIGHT = "Copyright (C) by Emanuel Eichhammer"
  • 设置目标库的公司名称和版权信息。同样,在Windows中这些信息会嵌入到生成的DLL文件中。
cpp 复制代码
SOURCES += ../../qcustomplot.cpp
HEADERS += ../../qcustomplot.h
  • 指定项目的源文件和头文件。这里使用了QCustomPlot的合并源文件(amalgamated sources),即所有代码都在一个.cpp和一个.h文件中。

配置总结

问题:

  1. 为什么生成的dll文件名是qcustomplot2.dll
    因为设置了version
cpp 复制代码
VERSION = 2.1.1
TARGET = qcustomplot

qmake会自动将主版本号(2)附加到库文件名上,这是Qt的默认行为。

  • qmake处理版本号时:

  • Windows系统:添加主版本号后缀

    -- TARGET + 主版本号 + .dll → qcustomplot2.dll

    -- Linux系统:创建带完整版本号的符号链接
    libqcustomplot.so → libqcustomplot.so.2 → libqcustomplot.so.2.1.1

相关推荐
OKkankan35 分钟前
string类的模拟实现
开发语言·数据结构·c++·算法
charlie1145141918 小时前
设计自己的小传输协议 导论与概念
c++·笔记·qt·网络协议·设计·通信协议
程序员编程指南11 小时前
Qt 并行计算框架与应用
c语言·数据库·c++·qt·系统架构
努力的小帅12 小时前
C++_红黑树树
开发语言·数据结构·c++·学习·算法·红黑树
CN-Dust12 小时前
【C++】指针
开发语言·c++
逐花归海.12 小时前
『 C++ 入门到放弃 』- 哈希表
数据结构·c++·程序人生·哈希算法·散列表
筏.k13 小时前
C++现代Redis客户端库redis-plus-plus详解
c++·redis
程序员编程指南13 小时前
Qt 多线程调试技巧与常见问题
c语言·开发语言·c++·qt
徐归阳14 小时前
第十一天:不定方程求解
c++·visual studio
1白天的黑夜114 小时前
前缀和-974.和可被k整除的子数组-力扣(LeetCode)
c++·leetcode·前缀和