Qt 使用
pkg-config
吗?
如果没有,找到
Automake & friends
项目的 Qt 安装位置的最佳方法是什么?
我的项目基于Autotools,Makefile是由Anjuta生成的。
Google 上有很多结果,但我找不到真正有帮助的结果。所以希望这对每个人来说都是一个。
另外 - 不要像
You should switch to CMake or Qmake
那样回答。我有一个用 GTK+ 完美构建的大型代码库,除了我试图合并一些 Qt 特定功能。 (项目本身是基于wxWidgets的)。
编辑:
这是我的二进制 Makefile.am:
## Process this file with automake to produce Makefile.in
bin_PROGRAMS = \
dbhandler
dbhandler_SOURCES = \
doc.cpp \
doc.h \
docview.cpp \
docview.h \
mainframe.cpp \
mainframe.h \
view.cpp \
view.h \
viewbase.cpp \
viewbase.h \
newtablehandler.cpp \
newtablehandler.h \
query.h \
table.h
dbhandler_CXXFLAGS = -I../../dbinterface \
-I../../libdbwindow/res/gui \
`wx-config --cxxflags`
dbhandler_LDFLAGS = `wx-config --libs`
如您所见,假定 wxWidgets 在构建后安装,并且它在 *nix 上内部使用 GTK 或 Qt。现在这是 Makefile.am,字体面板位于:
lib_LTLIBRARIES = \
libpropertypages.la
libpropertypages_la_SOURCES = \
qt/fontpropertypageQt.cpp \
qt/fontpropertypageQt.h \
gtk/fontpropertypageGTK.cpp \
gtk/fontpropertypageGTK.h
libpropertypages_la_CXXFLAGS = -I../../dbinterface \
`pkg-config \
--cflags \
gtk+-3.0` \
`wx-config --cxxflags`
libpropertypages_la_LDFLAGS = `pkg-config \
--libs \
gtk+-3.0` \
`wx-config --libs`
使用 GTK 可以很好地编译。使用 Qt 不是因为它需要找到 QFontPanerl/QFontDialog。
经过更深入的搜索,我发现我应该使用 QMake 来识别 Qt 安装头文件/库的位置。但是如果我没有安装Qt并且没有QMake,我将无法做任何事情。
Qt 使用
吗?pkg-config
您似乎在问Qt是否提供pkg-config数据。 是的,确实如此。
在典型的 Qt 形式中,它提供了几个 pkg-config 文件,一个是通用文件,一个是针对每个主要 Qt 子系统(Core、Gui、Widgets、etc)的文件。 鉴于您需要安装 Qt 开发环境才能处理您所描述的项目,您可能会自己发现这一点。
但是,至于
查找 Automake & Friends 项目的 Qt 安装位置的最佳方法是什么?
,我建议使用Autoconf 存档
中的
AX_HAVE_QT
宏。 这更符合 Autotools 项目的习惯,也更符合 Autotools 项目的习惯。 此外,它还为您提供了更多信息,例如,包括几种 Qt 开发工具的路径。
经过更深入的搜索,我发现我应该使用 QMake 来识别 Qt 安装头文件/库的位置。但如果我没有安装Qt 没有 QMake,我将无法做任何事情。如果您的项目依赖于 Qt,那么您需要 Qt 来构建它,所以我不明白为什么您认为依赖
qmake
进行所需检查存在问题。在这方面,
AX_HAVE_QT
确实使用
qmake
来执行其工作是相关的。 但是,如果您的 Qt 依赖项是可选的,或者如果以其他方式您可以在没有 Qt 的情况下构建合理的项目,那么这就是您应该在配置时而不是在构建时检测 Qt 的主要原因之一,这这个宏会为你做的。 如果 Qt 在某种程度上是可选的,那么这为您提供了一种在 Qt 不存在时适当配置构建的方法。 如果没有,那么它可以立即告诉您 Qt 丢失,而不是构建在中间某个地方失败。 顺便说一句,类似的情况也适用于其他包的检测和配置。 比如这个...
dbhandler_LDFLAGS = `wx-config --libs`
既可憎又错误。 这是令人讨厌的,至少因为所需的库和标志应该在配置时确定,而不是构建时。 这是错误的,因为
*_LDFLAGS
是列出需要包含在链接中的库的错误位置。 对于库目标,它们应放入
LDADD
或 *_LDADD
,对于库目标,应放入 LIBADD
或 *_LIBADD
。 使用 LDFLAGS
将它们放在链接命令行中的错误位置。