关于.Pro文件中引入源文件的不同写法,导致QMake无法生成正确的Makefile文件的错误

缘起

今天用Qt Creator 3.4.1 打开一个很老的工程,还是QT 4.5.2的,VS2008版本编辑的;没有语法错误,却在链接时提示"LNK2019: 无法解析的外部符号 "public: static class Log * __cdecl Log::instance(void)" (?instance@Log@@SAPAV1@XZ),该符号在函数 _main 中被引用"的错误。


在main.cpp中能够include头文件,在Qt Creator中使用快捷键F2也能够跳转到该类的函数定义中去。百思不得其解。


结果

原来是.Pro文件中的写法不同导致的。先上链接不通过的.Pro文件部分截图

这里企图用通配符的方式将该文件夹下的源文件加入工程;这本身没有什么问题,QT Creator的工程树中也能够索引config文件夹中的文件,但是QMake生成Makefile.Debug中出现了这么个玩意儿


                                                        

然后我就觉得QT Creator找的到该文件,QMake找不到;就得改,让它找到,截图如下:

然后就得到了我们需要的Makefile.Debug文件:




我对QMake学习的很少,也不知道什么原因,既然发现了这个现象,就记一下,欢迎批评指正啊!!!!

### 3.6 使用 qmake 根据 .pro 文件生成 DLL 和 A 文件Qt 6.8.0 中,使用 `qmake` 可以根据 `.pro` 文件生成 `.dll`(动态链接库)和 `.a`(静态库)文件。这一过程主要依赖于项目配置文件 `.pro` 中的 `TEMPLATE` 和 `TARGET` 变量,并结合 `qmake` 生成Makefile 来完成编译和链接操作。 #### 3.6.1 配置 `.pro` 文件 为了生成动态库或静态库文件,`.pro` 文件需要进行相应配置: - **生成动态库(.dll)**: ```qmake QT += core gui TARGET = mylibrary TEMPLATE = lib SOURCES += main.cpp\ myclass.cpp HEADERS += myclass.h ``` - **生成静态库(.a)**: ```qmake QT += core gui TARGET = mylibrary TEMPLATE = lib CONFIG += staticlib SOURCES += main.cpp\ myclass.cpp HEADERS += myclass.h ``` 在上述配置中,`TEMPLATE = lib` 表示该项目将生成一个库文件;`TARGET` 定义了生成的库文件名称;`CONFIG += staticlib` 表示生成静态库[^2]。 #### 3.6.2 使用 `qmake` 生成 Makefile 在项目目录下执行以下命令生成 Makefile: ```bash qmake -o Makefile mylibrary.pro ``` 该命令将根据 `.pro` 文件生成相应的 Makefile,其中包含了编译和链接的具体指令。 #### 3.6.3 编译生成 `.dll` 和 `.a` 文件 根据所使用的编译器,执行不同的构建命令: - **使用 MinGW 编译**: ```bash mingw32-make ``` - **使用 MSVC 编译**: ```bash nmake ``` 执行完成后,构建目录中将生成 `.dll` 和 `.a` 文件。对于动态库,`.a` 文件是导入库,用于链接 `.dll` 文件;对于静态库,`.a` 文件直接包含编译后的代码。 #### 3.6.4 静态链接与插件兼容性 在构建过程中,如果项目依赖 Qt 插件,如 SQL 驱动或图像格式插件,可以使用 `QPluginLoader` 加载插件,并通过嵌入的校验数据确保插件与应用程序的兼容性。此外,Qt 6.8.0 的打包工具存在一定的限制,只能复制常规组件的库文件,因此在打包时需要手动复制所需的插件和第三方库文件[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值