CMAKE_PREFIX_PATH 没有帮助 CMake 找到 Qt5
CMAKE_PREFIX_PATH doesn't help CMake in finding Qt5
从这里开始:
我试过这个:
cmake_minimum_required(VERSION 2.8.12)
project(qtquick_hello_cmake)
set(CMAKE_PREFIX_PATH "/opt/Qt5.9.1/5.9.1/")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 COMPONENTS Quick Core REQUIRED)
qt5_add_resources(RESOURCES qml.qrc)
add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc")
qt5_use_modules(${PROJECT_NAME} Quick Core)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick)
这是cmake .
的输出
:~/junk/qtquick_hello_cmake$ cmake .
CMake Error at CMakeLists.txt:11 (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.
-- Configuring incomplete, errors occurred!
See also "/home/.../junk/qtquick_hello_cmake/CMakeFiles/CMakeOutput.log".
这是为了证明/opt/Qt5.9.1/
确实存在
:~/junk/qtquick_hello_cmake$ cd /opt/Qt5.9.1/5.9.1/
:/opt/Qt5.9.1/5.9.1$ ls
android_armv7 android_x86 gcc_64 Src
这里我运行带-DCMAKE选项的cmake,但是输出还是一样的:
:~/junk/qtquick_hello_cmake$ cmake -DCMAKE_PREFIX_PATH=/opt/Qt5.9.1/5.9.1/ -DWITH_QT5=1 .
CMake Error at CMakeLists.txt:11 (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.
-- Configuring incomplete, errors occurred!
See also "/home/.../junk/qtquick_hello_cmake/CMakeFiles/CMakeOutput.log".
目录内容:
:~/junk/qtquick_hello_cmake$ ls
CMakeCache.txt CMakeFiles CMakeLists.txt main.cpp main.qml qml.qrc
我安装了以下缺少的软件包:
sudo apt-get install qtbase5-dev
sudo apt-get install qtdeclarative5-dev
现在不需要附加任何类型的前缀:
CMakeList:
:~/junk/qtquick_hello_cmake$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(qtquick_hello_cmake)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 COMPONENTS Quick Core REQUIRED)
qt5_add_resources(RESOURCES qml.qrc)
add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc")
qt5_use_modules(${PROJECT_NAME} Quick Core)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick)
新输出:
:~/junk/qtquick_hello_cmake$ ls
build CMakeLists.txt main.cpp main.qml qml.qrc
:~/junk/qtquick_hello_cmake$ cd build/
:~/junk/qtquick_hello_cmake/build$ rm -rf *
:~/junk/qtquick_hello_cmake/build$ cmake ../
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/.../junk/qtquick_hello_cmake/build
现在错误消失了。
感谢:
https://answers.ros.org/question/236324/could-not-find-a-package-configuration-file-provided-by-qt5widgets/
https://askubuntu.com/questions/508503/whats-the-development-package-for-qt5-in-14-04
关于失败 find_package
和设置 CMAKE_PREFIX_PATH 变量
的 CMake 错误消息
Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH
有点误导。它只谈论 "installation prefix",但此安装仍然 要求 包含 Qt5Config.cmake
或 qt5-config.cmake
文件,以便 find_package
可以发现。
但是消息
If "Qt5" provides a
separate development package or SDK, be sure it has been installed.
清楚:
需要安装一个包含所需配置文件的开发包。
以上所有内容仅适用于find_package
的CONFIG模式,当CMake和使用此命令的CMake项目均未提供"Find"脚本时.
我最近遇到了这个问题,我通过将此添加到任何产生此错误的 CMakeLists.txt 解决了这个问题:
set(Qt5_DIR "*PATH TO YOUR QT QT5CONFIG FILE HERE*" CACHE PATH "Initial cache" FORCE)
对于 macOS,在终端中导出以下变量。
export CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.15.1/
可能还有其他版本,请检查您使用的是哪个版本并相应地更改最后一个路径组件。
发布构建重新配置
cmake ../
另一种解决方案,例如,如果您在主目录中手动安装了 Qt(而不是使用系统版本),则可以在命令行中准确指定要使用的版本。示例:
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SAMPLES=TRUE \
-DBUILD_STATIC_QRC=TRUE \
-DCMAKE_PREFIX_PATH=/home/anthony/Qt/5.15.2/gcc_64 \
..
注意指定版本+您正在使用的目标系统。然后,Qt会在子目录中找到合适的配置文件。
几年后,我在使用新的 Android NDK 工具链时遇到了类似的问题。此处提供的解决方案还不够。我在这里找到了一个新方法和 post 用于以下内容:
$ cmake --log-level=DEBUG --debug-find <SRC_DIR>
这将打印出 CMake 找到包文件的查找过程。
从这里开始:
我试过这个:
cmake_minimum_required(VERSION 2.8.12)
project(qtquick_hello_cmake)
set(CMAKE_PREFIX_PATH "/opt/Qt5.9.1/5.9.1/")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 COMPONENTS Quick Core REQUIRED)
qt5_add_resources(RESOURCES qml.qrc)
add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc")
qt5_use_modules(${PROJECT_NAME} Quick Core)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick)
这是cmake .
:~/junk/qtquick_hello_cmake$ cmake .
CMake Error at CMakeLists.txt:11 (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.
-- Configuring incomplete, errors occurred!
See also "/home/.../junk/qtquick_hello_cmake/CMakeFiles/CMakeOutput.log".
这是为了证明/opt/Qt5.9.1/
确实存在
:~/junk/qtquick_hello_cmake$ cd /opt/Qt5.9.1/5.9.1/
:/opt/Qt5.9.1/5.9.1$ ls
android_armv7 android_x86 gcc_64 Src
这里我运行带-DCMAKE选项的cmake,但是输出还是一样的:
:~/junk/qtquick_hello_cmake$ cmake -DCMAKE_PREFIX_PATH=/opt/Qt5.9.1/5.9.1/ -DWITH_QT5=1 .
CMake Error at CMakeLists.txt:11 (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.
-- Configuring incomplete, errors occurred!
See also "/home/.../junk/qtquick_hello_cmake/CMakeFiles/CMakeOutput.log".
目录内容:
:~/junk/qtquick_hello_cmake$ ls
CMakeCache.txt CMakeFiles CMakeLists.txt main.cpp main.qml qml.qrc
我安装了以下缺少的软件包:
sudo apt-get install qtbase5-dev
sudo apt-get install qtdeclarative5-dev
现在不需要附加任何类型的前缀:
CMakeList:
:~/junk/qtquick_hello_cmake$ cat CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
project(qtquick_hello_cmake)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 COMPONENTS Quick Core REQUIRED)
qt5_add_resources(RESOURCES qml.qrc)
add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc")
qt5_use_modules(${PROJECT_NAME} Quick Core)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick)
新输出:
:~/junk/qtquick_hello_cmake$ ls
build CMakeLists.txt main.cpp main.qml qml.qrc
:~/junk/qtquick_hello_cmake$ cd build/
:~/junk/qtquick_hello_cmake/build$ rm -rf *
:~/junk/qtquick_hello_cmake/build$ cmake ../
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/.../junk/qtquick_hello_cmake/build
现在错误消失了。
感谢:
https://answers.ros.org/question/236324/could-not-find-a-package-configuration-file-provided-by-qt5widgets/
https://askubuntu.com/questions/508503/whats-the-development-package-for-qt5-in-14-04
关于失败 find_package
和设置 CMAKE_PREFIX_PATH 变量
Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH
有点误导。它只谈论 "installation prefix",但此安装仍然 要求 包含 Qt5Config.cmake
或 qt5-config.cmake
文件,以便 find_package
可以发现。
但是消息
If "Qt5" provides a separate development package or SDK, be sure it has been installed.
清楚:
需要安装一个包含所需配置文件的开发包。
以上所有内容仅适用于find_package
的CONFIG模式,当CMake和使用此命令的CMake项目均未提供"Find"脚本时.
我最近遇到了这个问题,我通过将此添加到任何产生此错误的 CMakeLists.txt 解决了这个问题:
set(Qt5_DIR "*PATH TO YOUR QT QT5CONFIG FILE HERE*" CACHE PATH "Initial cache" FORCE)
对于 macOS,在终端中导出以下变量。
export CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.15.1/
可能还有其他版本,请检查您使用的是哪个版本并相应地更改最后一个路径组件。
发布构建重新配置
cmake ../
另一种解决方案,例如,如果您在主目录中手动安装了 Qt(而不是使用系统版本),则可以在命令行中准确指定要使用的版本。示例:
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SAMPLES=TRUE \
-DBUILD_STATIC_QRC=TRUE \
-DCMAKE_PREFIX_PATH=/home/anthony/Qt/5.15.2/gcc_64 \
..
注意指定版本+您正在使用的目标系统。然后,Qt会在子目录中找到合适的配置文件。
几年后,我在使用新的 Android NDK 工具链时遇到了类似的问题。此处提供的解决方案还不够。我在这里找到了一个新方法和 post 用于以下内容:
$ cmake --log-level=DEBUG --debug-find <SRC_DIR>
这将打印出 CMake 找到包文件的查找过程。