C++ 如何为iOS的cmake项目查找(配置)Qt?

C++ 如何为iOS的cmake项目查找(配置)Qt?,c++,ios,macos,qt,cmake,C++,Ios,Macos,Qt,Cmake,我通过macOS上的在线安装程序安装Qt(Qt用于iOS和macOS)。 qmake项目工作正常,现在我需要使用cmake Qt项目编译: cmake_minimum_required(VERSION 3.5) project(demo LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED O

我通过macOS上的在线安装程序安装Qt(Qt用于iOS和macOS)。 qmake项目工作正常,现在我需要使用cmake Qt项目编译:

cmake_minimum_required(VERSION 3.5)
project(demo LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Core Quick REQUIRED)
我找不到Qt

直接生成配置:

cmake .. -GXcode -DQt5_DIR=/Users/user/Qt/5.14.1/clang_64/lib/cmake/Qt5
...
-- Configuring done
-- Generating done
-- Build files have been written to:
iOS的交叉编译:

cmake .. -GXcode -DCMAKE_SYSTEM_NAME=iOS -DQt5_DIR=/Users/user/Qt/5.14.1/ios/lib/cmake/Qt5
...
CMake Error at /Users/user/Qt/5.14.1/ios/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package):
  Could not find a package configuration file provided by "Qt5Core" with any
  of the following names:

    Qt5CoreConfig.cmake
    qt5core-config.cmake

  Add the installation prefix of "Qt5Core" to CMAKE_PREFIX_PATH or set
  "Qt5Core_DIR" to a directory containing one of the above files.  If
  "Qt5Core" provides a separate development package or SDK, be sure it has
  been installed.
显然,Qt5CoreConfig.cmake很好,它与“直接”编译处于相对相同的位置,但出于某种原因,cmake找不到它

$ find /Users/user/Qt/5.14.1/ios/lib/cmake/ -name Qt5CoreConfig.cmake
/Users/user/Qt/5.14.1/ios/lib/cmake//Qt5Core/Qt5CoreConfig.cmake

如何解决此问题?

为iOS构建时
CMAKE\u SYSROOT
设置为
iPhoneOS.sdk
路径

:

CMAKE_SYSROOT变量还可用于指定一个目录作为前缀。设置CMAKE_SYSROOT还具有其他效果。有关更多信息,请参阅该变量的文档

当交叉编译指向目标环境的根目录时,这些变量特别有用,CMake也将在那里搜索。默认情况下,首先搜索CMAKE_FIND_ROOT_PATH中列出的目录,然后搜索CMAKE_SYSROOT目录,然后搜索非根目录


因此,添加选项
-DCMAKE\u FIND\u ROOT\u PATH=/Users/user/Qt/5.14.1/ios
会有所帮助。

您可以通过设置
CMAKE\u PREFIX\u PATH
CMAKE变量来解决这个问题。@squareskittles不,正如我在上面所展示的,它在“直接编译案例”中对我很有效,但相对而言,相同的路径不适用于交叉编译情况。@squareskittles CMAKE_PREFIX_路径对我根本不起作用。不适用于直接编译,也不适用于交叉编译。虽然Qt5_Dir有效,但仅适用于“直接”情况。设置
-DCMAKE_PREFIX_PATH=/Users/user/Qt/5.14.1/clang_64
应适用于“直接”生成。如果设置
-DCMAKE_PREFIX_PATH=/Users/user/Qt/5.14.1/ios
不适用于交叉编译,则工具链要求外部库位于sysroot或工具链中指定的某些其他“根路径”下。