#cmake #qt5 #qmake
#cmake #qt5 #qmake
Вопрос:
У меня есть операционная система на базе Linux, которая по умолчанию не предоставляет a default.conf
qtchooser
, что приводит к:
$ qmake
qmake: could not find a Qt installation of ''
$ qmlcachegen
qmlcachegen: could not find a Qt installation of ''
Как правило, вы бы решили эту проблему, указав версию вручную:
$ qmake -qt5 -v
QMake version 3.1
Using Qt version 5.11.3 in /usr/lib/x86_64-linux-gnu
$ QT_SELECT=5 qmake -v
QMake version 3.1
Using Qt version 5.11.3 in /usr/lib/x86_64-linux-gnu
Это также можно решить, создав такие файлы, как:
/etc/xdg/qtchooser/default.conf
/usr/share/qtchooser/default.conf
- и т.д.
Однако ради этого вопроса моя ОС не предоставляет этот файл.
Проблема
При использовании CMake 3.13.4 это работает нормально (необязательно, предоставляя -DCMAKE_PREFIX_PATH=/path/to/qt
):
find_package(Qt5 REQUIRED COMPONENTS Core)
qt5_add_resources(RESOURCES assets.qrc)
target_link_libraries(my_app PUBLIC
Qt5::Core)
Однако при попытке использовать компиляцию QML с опережением времени нам предлагается заменить qt5_add_resources()
на qtquick_compiler_add_resources()
find_package(Qt5 REQUIRED COMPONENTS Core QuickCompiler)
qtquick_compiler_add_resources(RESOURCES assets.qrc)
[...]
Которая будет использоваться /usr/lib/x86_64-linux-gnu/cmake/Qt5QuickCompiler/Qt5QuickCompilerConfig.cmake
для определения местоположения двоичного qmlcachegen
файла и использовать его для компиляции файлов QML.
Таким образом, CMake в конечном итоге делает что-то вроде execve("/usr/bin/qmlcachegen", resource_files);
.
Но /usr/bin/qmlcachegen
не знает ни о какой установке Qt, поэтому она завершается с ошибкой:
[ 15%] Generating qml_components_ChatScrollToBottomButton_qml.cpp
make[3]: *** [src/CMakeFiles/conversations_autogen.dir/build.make:85: src/qml_components_Chat_qml.cpp] Error 1
qmlcachegen: could not find a Qt installation of ''
Вопрос
Несмотря на то, что мы использовали CMake для определения того, какую установку Qt использовать, qmlcachegen
она имеет свою собственную логику для поиска пути к Qt. Судя по Qt5QuickCompilerConfig.cmake
тому, что нет способа предоставить переменную среды QT_SELECT
или передать -qt5
аргумент.
- Несет ли моя ОС ответственность за предоставление a
default.conf
, чтобы Qt мог найти установку? - Несет ли CMake ответственность за правильную передачу необходимого контекста перед вызовом
qmlcachegen
?
Ответ №1:
qt5-default
добавляет /usr/lib/x86_64-linux-gnu/qtchooser//default.conf
и, таким образом qmake
, и qmlcachegen
сможет найти установку Qt по умолчанию.