编译Qt 5.9源码生成的头文件依赖原源码目录,如何解决?
解决Qt 5.9源码编译后头文件依赖原源码目录的问题
我之前也碰到过一模一样的情况,核心原因是你跳过了Qt编译流程里至关重要的install步骤——官方安装包的独立目录正是通过这一步生成的,它会把编译好的库、修正路径后的头文件完整复制到你指定的prefix目录,彻底脱离原源码的依赖。下面是具体的解决步骤:
1. 补全编译+安装的完整流程
如果之前你只执行了编译命令(比如nmake或mingw32-make),请按以下步骤操作:
- 先进入你的Qt构建目录(如果是在源码目录内构建的,建议后面换成单独的构建目录,避免路径混淆)
- 重新运行configure命令(参数可以保留你的原有设置,加上
-nomake参数能节省编译时间):configure.bat -prefix C:\qt\Qt5.9x86 -debug-and-release -static -nomake examples -nomake tests - 执行编译命令(根据你用的编译器选择):
- 使用MSVC:
nmake - 使用MinGW:
mingw32-make -j4(-j4代表用4核编译,替换成你CPU的核心数能加快编译速度)
- 使用MSVC:
- 最关键的一步:执行安装命令
- MSVC:
nmake install - MinGW:
mingw32-make install
- MSVC:
这一步执行完成后,Qt会把所有需要的文件(修正了路径的头文件、编译好的静态库、工具等)全部复制到C:\qt\Qt5.9x86目录下,此时头文件里的#include路径就会变成你期望的相对路径,不再指向原源码目录。
2. 推荐使用Out-of-Source构建(避免路径问题)
如果你之前是在Qt源码目录里直接构建的,很容易出现路径计算错误。建议换成独立构建目录(Out-of-Source Build):
- 比如你的源码目录是
C:\qt\qt5.9-src,新建一个C:\qt\qt5.9-build目录 - 进入
C:\qt\qt5.9-build,运行configure命令时指定源码目录:
这样中间编译文件都在build目录,不会污染源码,也能从根源减少路径相关的问题。..\qt5.9-src\configure.bat -prefix C:\qt\Qt5.9x86 -debug-and-release -static -nomake examples -nomake tests
3. 验证结果
安装完成后,打开C:\qt\Qt5.9x86\include\QtCore\qdebug.h检查里面的#include语句,应该已经变成类似#include "../../src/corelib/io/qdebug.h"的正确路径。这时候你就可以放心删除原源码目录和构建目录了,C:\qt\Qt5.9x86就是一个完全独立的Qt环境。
内容的提问来源于stack exchange,提问作者Mohammad Zatkhahi




