Qt是否支持pkg-config?Autotools项目如何定位Qt安装路径
Qt与pkg-config的适配及Autotools项目集成方案
一、Qt对pkg-config的支持情况
Qt从Qt 5.7版本开始官方提供pkg-config支持,主流Linux发行版的Qt开发包(如Debian/Ubuntu的qtbase5-dev)会附带对应模块的.pc文件(如QtCore.pc、QtGui.pc、QtWidgets.pc)。对于Qt 5.7之前的版本,通常没有官方pkg-config文件,需要通过qmake工具来获取Qt的安装路径和编译参数。
二、Autotools项目集成Qt的正确实现
针对你的Autotools项目(由Anjuta生成Makefile),以下是无需切换到CMake/Qmake的解决方案,修正你之前的语法错误并保证兼容性:
1. 配置configure.ac
修改configure.ac,添加Qt检测逻辑,同时兼容pkg-config和qmake两种方式:
# 检测Qt:优先用pkg-config,失败则 fallback 到qmake PKG_CHECK_MODULES([QT], [QtCore QtGui QtWidgets], [QT_FOUND=yes], [ AC_CHECK_PROGS([QMAKE], [qmake-qt5 qmake], [], [AC_MSG_ERROR([Qt未找到,请安装Qt开发包或确保qmake/pkg-config在PATH中])] ) # 通过qmake获取头文件和库路径 QT_INCLUDE_DIR=$($QMAKE -query QT_INSTALL_HEADERS) QT_LIB_DIR=$($QMAKE -query QT_INSTALL_LIBS) QT_CXXFLAGS="-I$QT_INCLUDE_DIR" QT_LIBS="-L$QT_LIB_DIR -lQt5Core -lQt5Gui -lQt5Widgets" QT_FOUND=yes ] ) # 定义Automake条件编译变量 AM_CONDITIONAL([USE_QT], [test "x$QT_FOUND" = "xyes"]) AM_CONDITIONAL([USE_GTK], [test "x$QT_FOUND" != "xyes"])
2. 修改libpropertypages的Makefile.am
修正条件判断语法,分离Qt/GTK的源文件与编译参数:
lib_LTLIBRARIES = libpropertypages.la # 根据编译条件选择源文件 libpropertypages_la_SOURCES = if USE_QT libpropertypages_la_SOURCES += qt/fontpropertypageQt.cpp qt/fontpropertypageQt.h else libpropertypages_la_SOURCES += gtk/fontpropertypageGTK.cpp gtk/fontpropertypageGTK.h endif # 公共编译参数 libpropertypages_la_CXXFLAGS = -I../../dbinterface `wx-config --cxxflags` # 分Qt/GTK设置编译和链接参数 if USE_QT libpropertypages_la_CXXFLAGS += $(QT_CXXFLAGS) libpropertypages_la_LDFLAGS = $(QT_LIBS) `wx-config --libs` else libpropertypages_la_CXXFLAGS += `pkg-config --cflags gtk+-3.0` libpropertypages_la_LDFLAGS = `pkg-config --libs gtk+-3.0` `wx-config --libs` endif
3. 关键修正说明
- 你之前的
configure.ac中if test语法错误,Autotools的条件判断需用AM_CONDITIONAL定义变量,在Makefile.am中用if 变量名的语法 - 不要将链接库参数(
QT_LIBS)加到CXXFLAGS中,应放在LDFLAGS里 - 分离Qt/GTK的源文件,避免编译不需要的代码,减少编译时间
三、额外注意事项
- 确保安装对应Qt版本的开发包:Qt5需安装
qtbase5-dev、qtbase5-dev-tools(提供qmake);Qt4需安装libqt4-dev - 如果你的系统中同时存在Qt4和Qt5,可通过指定
qmake-qt5或qmake-qt4来明确版本 - 你的wxWidgets项目基于GTK构建,无需改动wx的配置,仅需保证Qt相关代码的编译路径正确即可
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

