CMake无法找到Qt4

12
自从4.8.0发布以来,我重新安装了Qt,现在我也想使用cmake。为了使cmake工作,我记得在Qt4.7.3中必须将mingw bin文件夹( QtSDK \ Desktop \ Qt \ 4.7.3 )添加到PATH中,因此我猜测现在会在 QtSDK \ Desktop \ Qt \ 4.8.0 中有一个类似的文件夹,但事实并非如此。我的问题是,是否有其他人设置Qt和cmake的经验? 我现在需要一些帮助,因为我已经搜索了一段时间,但找不到任何方法使cmake工作。

尝试构建时,我收到了这个众所周知的消息:

CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:91 (MESSAGE):
  Could NOT find Qt4 (missing: QT_QMAKE_EXECUTABLE QT_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:252 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindQt4.cmake:1171 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:3 (find_package)

我相信我所要做的就是确保我的QT_ROOT环境变量已经设置好了(在我的机器上是C:\Qt\4.8.0\)。 - tmpearce
@tmpearce:你是指在CMakeLists.txt文件中吗?如果不是的话,能否请您告诉我如何做呢? - Neko
我假设你在使用Windows系统,因此我不会按照"c:..."路径进行操作。通过右键单击“我的电脑”上下文菜单,您可以找到“环境变量”。如果需要更多帮助,请搜索Google。我在家里没有Windows系统。进入该页面后,如果需要,您可以创建新的环境变量(通常为“PATH”,以此作为示例),以满足第一条评论中所述的需求。 - tmpearce
5个回答

8

只需设置QT_QMAKE_EXECUTABLE中的qmake路径,然后cmake可以使用qmake -query找到所有其他所需路径(类似于Linux上的pkg-config)。

使用Qt和CMake构建项目的步骤通常如下:

  1. 检出/创建项目源文件夹
  2. 创建项目文件夹外部的构建文件夹
  3. 启动Qt命令提示符/cmdcd进入构建文件夹,例如cd build\project
  4. 运行cmake或cmake-gui,并传递源文件夹的路径,例如cmake-gui ..\..\source\project
  5. 设置任何变量,例如QT_QMAKE_EXECUTABLECMAKE_BUILD_TYPE
  6. 运行您的构建工具,或运行cmake --build .

VTK的指令说要使用标志-DQT_QMAKE_EXECUTABLE:PATH=/path/to/qmake,但这对我不起作用。 - Translunar

5
所以,我找到了问题所在,我认为我之前应该知道。我只是将C:\QtSDK\Desktop\Qt\4.8.0\msvc2010\bin添加到了我的PATH变量中。值得注意的是,在默认的4.8.0安装中,qmake位于C:\QtSDK\Desktop\Qt\4.8.0\msvc2010\bin而不是4.7.3中的C:\QtSDK\Desktop\Qt\4.7.3\mingw\bin。请注意区别:msvc2010mingw。实际上,这是非常明显的,因为msvc2010是该目录中唯一的文件夹。

我没有尝试skyhisi的答案,因为它已经不再需要,但我猜这是使cmake工作的另一种正确(如果不是更好)的方法。


2

我刚遇到了同样的问题...看一下findQt4.cmake文件。

FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake4 qmake-qt4 qmake-mac PATHS
   "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
   "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin"
   "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\${qt_install_version};InstallDir]/bin"
   $ENV{QTDIR}/bin
   DOC "The qmake executable for the Qt installation to use")

您可以更改注册表键,或者我个人更喜欢删除所有这些键并修改$ENV{QTDIR}变量。祝好运。


非常感谢!我刚刚卸载了4.8.5-vs2010并安装了4.8.5-mingw,但安装程序出了点问题。我追踪了findQt4.cmake文件,但没有找到问题所在。你的帖子指引我去查看了HKCU中的“Versions”,结果发现是空的。原来安装程序把条目放在了错误的账户下!我非常确定我是以“我自己”的身份运行安装程序的,而不是在第二个桌面上。无论如何,我把那个第二个账户下的“Versions”移动到了我的账户下,现在cmake可以正确地找到Qt4了。另外,值得注意的是,在HKLM下全局放置键是不起作用的。 - quetzalcoatl

2

我曾经遇到过一个略微不同的问题,也许这会对其他人有所帮助:

我卸载了Qt 4.8.3,然后安装了Qt 4.8.4。根据Slava的答案,我发现CMake正在从以下位置获取$(qt_install_version}的值:

[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\DefaultVersion]

尽管所有其他注册表项都已更新为4.8.4,但此项仍设置为4.8.3。将DefaultVersion键的值更改为4.8.4即可解决我的问题。


0

我曾经遇到过同样的问题,我解决了它,提供了qmake的路径。

 QT_QMAKE_EXECUTABLE   /opt/qt-4.8.7/bin/qmake

在 Mac 上,二进制文件保存在 /usr/local/Trolltech/Qt-4.8.7/bin,而所需的 qmake 作为 QT_QMAKE_EXECUTABLE 的值,在我的操作系统中存储在路径 /opt/qt-4.8.7/bin/qmake 中。希望这也能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接