ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

.pro配置文件

.pro配置文件 (1) CONFIG用于定义项目的编译配置、特性和依赖通过/-来添加 / 移除配置项。# 基础用法常用组合 CONFIG c17 # 指定编译标准为C17可替换为c11/c14/c20 CONFIG release # 编译为发布版本优化、无调试信息 CONFIG debug # 编译为调试版本包含调试信息便于调试 CONFIG debug_and_release # 同时生成debug和release版本 CONFIG shared # 编译为动态库默认对应dll/so CONFIG static # 编译为静态库对应lib/a CONFIG qt core gui widgets # 指定依赖Qt的模块core/gui/widgets等 # 实用场景区分debug/release路径 CONFIG(debug, debug|release) { DESTDIR $$PWD/bin/debug # debug版本输出到bin/debug } else { DESTDIR $$PWD/bin/release # release版本输出到bin/release }核心作用控制编译模式、语言标准、库类型、Qt 模块依赖等核心编译行为。(2) TARGET 目标文件名称指定编译后生成的目标文件名称可执行程序 / 库的名字TARGET MyApp # Windows生成MyApp.exeLinux生成MyAppMac生成MyApp.app TARGET MyLib # 动态库Windows生成MyLib.dllLinux生成libMyLib.so注意TARGET 不要包含路径路径由 DESTDIR 控制。(3)DESTDIR输出路径专门用于指定编译后目标文件的输出路径。(4)DEFINES预定义变量用于指定需要传递给 C/C 预处理器的宏定义。这些宏会在编译阶段生效影响代码的条件编译逻辑例如#ifdef、#ifndef等判断。DEFINES HVSLAVE_LIBRARY //用于标记 “当前正在编译动态库本身”在 Windows 平台下实现了动态库中类的符号导出编译库时和外部程序的符号导入使用库时核心是HVSLAVE_EXPORT宏根据场景自动切换为 “导出” 或 “导入” 状态导出Q_DECL_EXPORT是在动态库项目自身中配置的通过类声明前加Q_DECL_EXPORT),作用是将库中的类 / 符号写入动态库的 “导出表”让外部程序能识别。导入Q_DECL_IMPORTLIBS配置是在使用动态库的程序中配置的Q_DECL_IMPORT告诉编译器 “这个类来自外部库”而LIBS告诉链接器 “去哪里找这个库并链接它”。//只要这个类要放进动态库并且想被其他程序调用就必须用 HVSLAVE_EXPORT 。 //它的作用就是让动态库里的类能被外部程序 “认出来” 并正常使用尤其在 Windows 上是 “刚需” //头文件开头添加 #ifdef HVSLAVE_LIBRARY //这个宏通常在库项目的编译配置中定义 #define HVSLAVE_EXPORT Q_DECL_EXPORT // 库内部编译时导出 #else #define HVSLAVE_EXPORT Q_DECL_IMPORT // 外部引用时导入 #endif //类前添加HVSLAVE_EXPORT class HVSLAVE_EXPORT MainHVSlave : public QWidget { Q_OBJECT } //在编译动态库时HVSLAVE_EXPORT 是 “导出” 标签相当于告诉动态库“这个类可以外借” //其他程序用时HVSLAVE_EXPORT 自动变成 “导入” 标签相当于告诉程序“这个类是从外面的动态库借来的直接用就行” 另外 其他程序想调用该类时 1.添加头文件 2.pro 文件LIBS -L/dll存放的文件夹路径 -l需要链接的动态库名称 该类的代码实际存在于一个动态库文件里比如 Windows 上的 .dll、Linux 上的 .so、Mac 上的 .dylib 其他程序必须知道这个动态库文件放在电脑的哪个文件夹里在.pro添加库链接告诉编译器去哪里找这个库问动态库符号表是什么你可以把动态库符号表理解为动态库.dll/.so/.dylib的 “功能目录 / 索引表”。动态库本质是一堆编译后的二进制代码机器指令人类无法直接识别符号表就是给这些二进制代码 “贴标签”记录了「函数 / 类 / 变量的名字」和「它在库中的内存地址」的对应关系当程序使用动态库时链接器 / 操作系统会通过这个 “目录” 找到需要的功能比如JsonCommGlobal::getInstance()并跳转到对应的二进制代码执行。(5)LIBS第三方链接告诉编译器 “要链接哪个库去哪里找库文件”unix|win32: LIBS -L$$PWD/DLL/ -lControlCAN 作用指定项目需要链接的外部库文件仅在 Unix/Linux 或 Windows 系统生效。 //拆解 unix|win32:条件判断只对 Unix/Linux如 Ubuntu或 Windows 系统生效。 LIBS 告诉编译器 “追加需要链接的库”。 -L$$PWD/DLL/-L 是 “指定库文件的搜索路径” $$PWD 是当前 .pro 文件所在目录 整体表示 “在当前目录的 DLL 文件夹里找库”。 -lControlCAN-l小写 L是 “指定要链接的库名” 表示要链接名为 ControlCAN 的库。 Windows 下实际找 ControlCAN.lib导入库或 ControlCAN.dll动态库 Linux 下找 libControlCAN.so动态库或 libControlCAN.a静态库。(6) TEMPLATE 类型标识TEMPLATE是 Qt qmake 工具的核心变量直接决定 qmake 生成的构建文件Makefile/VS 工程 / Xcode 工程类型也就是决定你的项目最终会被编译成什么类型的产物。取值中文释义核心作用典型输出产物app应用程序模板编译生成可执行程序桌面端 / 控制台程序Windows:.exe、Linux: 可执行文件、Mac:.applib库模板编译生成库文件静态库 / 动态库动态库:.dll/.so/.dylib静态库:.lib/.asubdirs子目录模板管理多子项目主项目不编译代码仅触发子项目的编译无直接产物仅协调子项目构建
返回列表