如何为Qt5运行pkg-config 或查找Qt安装路径的其他方法
Qt5 pkg-config 配置及安装路径检测方案
直接使用pkg-config调用Qt5的方法
标准Qt5安装包会随附对应模块的pkg-config配置文件(.pc后缀),默认搜索路径可找到对应配置时,可直接使用类似GTK的调用语法,按需指定所需Qt模块即可,示例:pkg-config --cflags --libs Qt5Core Qt5Widgets
如果是通过Qt官网安装包手动安装的Qt,默认不会将.pc文件路径加入pkg-config的搜索路径,需要先配置PKG_CONFIG_PATH环境变量,指向对应Qt版本、对应编译架构目录下的lib/pkgconfig路径,示例(Linux平台):
export PKG_CONFIG_PATH=/home/yourname/Qt5.15.2/5.15.2/gcc_64/lib/pkgconfig:$PKG_CONFIG_PATH pkg-config --cflags Qt5Core
Windows、macOS平台配置逻辑一致,只需替换为对应系统下Qt安装路径内的pkgconfig目录即可。
跨平台自动检测Qt路径的通用方案
如果不想手动配置环境变量,希望Makefile自动识别Qt安装位置,更推荐使用Qt自带的qmake工具做路径检测,该方案兼容性远高于pkg-config,无需额外配置路径即可识别系统预装、手动安装的各版本标准Qt:
- 用
qmake -query QT_INSTALL_HEADERS可直接获取Qt头文件根路径 - 用
qmake -query QT_INSTALL_LIBS可直接获取Qt库文件路径
可以直接把下面的逻辑加入你的现有Makefile,和你已有的GTK pkg-config逻辑完全兼容,无需反复修改配置:
# 优先用pkg-config检测Qt5,兼容现有逻辑 QT_PKG_VALID := $(shell pkg-config --exists Qt5Core Qt5Widgets 2>/dev/null && echo ok) ifeq ($(QT_PKG_VALID),ok) QT_CFLAGS := $(shell pkg-config --cflags Qt5Core Qt5Widgets) QT_LIBS := $(shell pkg-config --libs Qt5Core Qt5Widgets) else # 自动查找qmake,适配不同发行版的qmake命名差异 QT_QMAKE := $(shell which qmake-qt5 qmake 2>/dev/null) ifeq ($(QT_QMAKE),) $(error 未检测到Qt5安装,请安装Qt5或将Qt的bin目录加入PATH环境变量) endif # 用qmake查询路径生成编译参数 QT_CFLAGS := -I$(shell $(QT_QMAKE) -query QT_INSTALL_HEADERS) QT_LIBS := -L$(shell $(QT_QMAKE) -query QT_INSTALL_LIBS) -lQt5Core -lQt5Widgets endif
适配未预装Qt的目标系统的补充说明
如果目标系统未预装Qt,只需在执行编译前预置QT_PATH环境变量,在Makefile中增加优先读取环境变量的逻辑即可,无需修改Makefile核心配置:
# 增加环境变量优先逻辑 ifneq ($(QT_PATH),) QT_QMAKE := $(QT_PATH)/bin/qmake endif
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

