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

相关推荐
玉树临风江流儿28 分钟前
C++左值、右值、move移动函数
开发语言·c++
许长安2 小时前
c/c++ static关键字详解
c语言·c++·经验分享·笔记
Murphy_lx2 小时前
C++ thread类
开发语言·c++
月夜的风吹雨2 小时前
【C++ STL 深度剖析】:vector 底层模拟实现与核心陷阱解析
c++·vector·类和对象·visual studio
彩妙不是菜喵2 小时前
C++ 中 nullptr 的使用与实践:从陷阱到最佳实践
开发语言·jvm·c++
_dindong4 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
共享家95274 小时前
Qt窗口教程(上)
开发语言·qt
俊俊谢4 小时前
OpenCV环境配置(QT 6.6.1 MSVC2019 64bit + OpenCV – 4.12.0)
qt·opencv·msvc
liu****4 小时前
12.线程(二)
linux·开发语言·c++·1024程序员节
小小鱼儿飞5 小时前
QT Quick QML项目音乐播放器16----无边框窗口拖动、小窗播放、隐藏系统托盘
开发语言·qt