MacOS Sierra - cmake使用qt5失败

10

我正在尝试使用CMake构建一个cpp/qt5项目,但是编译时出现了关于QT5的错误。

我已经使用Homebrew安装了QT5。

当我执行以下命令时:

brew --prefix qt5

我理解

 /usr/local/Cellar/qt5/5.6.0

我现在在项目的 build 文件夹中,然后我执行以下操作:

cmake .. -DCMAKE_PREFIX_PATH=$(brew --prefix qt5) -G Xcode -DBUILD_TESTS=ON -DBUILD_TESTS_COVERAGE=off

返回给我这个错误:

    CMake Error at CMakeLists.txt:124 (find_package):
  By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Qt5", but
  CMake did not find one.

  Could not find a package configuration file provided by "Qt5" with any of
  the following names:

    Qt5Config.cmake
    qt5-config.cmake

  Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
  to a directory containing one of the above files.  If "Qt5" provides a
  separate development package or SDK, be sure it has been installed.

CMakelist.txt 中的错误行:

    ## QT5 ##

find_package(Qt5 COMPONENTS Core Gui Widgets Concurrent Qml Quick REQUIRED)

set_target_properties(${BIN_NAME} PROPERTIES AUTOMOC ON)
set_target_properties(${BIN_NAME} PROPERTIES AUTOUIC ON)
target_link_libraries(${BIN_NAME} PUBLIC Qt5::Core PUBLIC Qt5::Widgets PUBLIC Qt5::Gui PUBLIC Qt5::Qml PUBLIC Qt5::Quick PUBLIC Qt5::Concurrent)

#########

我也尝试在命令中添加-DQt5_DIR=$(brew --prefix qt5),但结果相同。


有什么想法吗? 谢谢


你的QT5安装中是否存在Qt5Config.cmake文件? - Tsyvarev
我该如何验证? - F4Ke
我不熟悉brew,但它肯定应该能够提供已安装软件包的文件列表。但在给定的情况下,只需在/usr/local/Cellar/qt5/5.6.0下搜索给定的文件即可:变量CMAKE_PREFIX_PATH只是为搜索添加新的前缀。至于变量Qt5_DIR,为了产生效果,此目录应直接包含所需文件。 - Tsyvarev
1个回答

21

尝试:

-DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5

请注意,在使用 set_target_properties 时,您可以指定多个属性,并在使用 target_link_libraries 时为多个值指定 PUBLIC 范围:

set_target_properties(${BIN_NAME}
    PROPERTIES
    AUTOMOC ON
    AUTOUIC ON
)
target_link_libraries(${BIN_NAME}
    PUBLIC
    Qt5::Core
    Qt5::Widgets
    Qt5::Gui
    Qt5::Qml
    Qt5::Quick
    Qt5::Concurrent
)

1
注意:homebrew 中的 qt5 已被弃用,但您可以使用 qt 代替,例如 $(brew --prefix qt)brew install qt@5.11 - Robobenklein
你仍然可以使用qt5。最近我在Mojave上使用qt5构建了Miktex,当某些内容被弃用时,这并不意味着它无法工作。 - Sebastian

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