How to set qt5 path with cmake find_package on Windows?

You can set click the Add Entry button in CMake Gui and add a new variable called Qt5_DIR, select its type as PATH and its value to something like C:\Qt\5.11.0\msvc2017_64\lib\cmake\Qt5 where 5.11.0 is the Qt version. This folder must contain Qt5Config.cmake that CMake needs to set things up correctly.

find_package search order is following:

  2. Search in environment variables: <package>_DIR, CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH, CMAKE_APPBUNDLE_PATH.
  3. Search in the HINTS option.
  4. Search the PATH environment variable.
  5. And in some more "desperate" places. More about that here.

With that in mind there are several ways to provide a proper version to QT:

  1. Have an environment variable pointing to the proper version of QT (e.g. QTDIR). And use it in the CMake files:
    • like set(CMAKE_PREFIX_PATH "$ENV{QTDIR}")
    • or find_package(Qt5 HINTS "$ENV{QTDIR}" COMPONENTS Core Quick REQUIRED)
  2. Have an environment variable explicitly named Qt5_DIR pointing to the proper version of QT. Then no additional changes to CMake files are required.
  3. Make sure that required version of Qt is the first one to be found in the PATH environment variable, for example, for windows C:\Qt\Qt5.10.1\5.10.1\msvc2017_64

My workaround was to put desired QT to the top of PATH variable. It has to be in PATH if you want CMAKE to find it.