Переменная Qt5_DIR исчезает из кеша CMake при вызове из командной строкиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Переменная Qt5_DIR исчезает из кеша CMake при вызове из командной строки

Сообщение Anonymous »

У меня есть большая сборка CMake с использованием библиотеки Qt. Когда я вызываю эту сборку из командной строки или внутри VSCode, я обнаружил, что переменная Qt5_DIR не установлена ​​в кеше cmake непосредственно после настройки проекта.
Например, после использования следующего команда Qt5_DIR отсутствует в кеше:
cmake -DQt5_DIR=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5 -S .. -B .

Это вызывает проблему, если я позже попытаюсь изменить переменную с помощью графического интерфейса CMake, поскольку получаю сообщение об ошибке о том, что Qt5_DIR не установлен. Если я устанавливаю ее явно в графическом интерфейсе CMake, то переменная сохраняется до тех пор, пока я снова не выполню версию командной строки (или не создам ее в VSCode).
Есть ли способ получить эту переменную сохраняться при вызове cmake из командной строки?
*Протестировано с использованием CMake 3.24.3 и 3.31.4.

Обновление: Я воспроизвел эту проблему в очень простом проекте.
  • Создайте CMakeLists.txt и заполните его следующим кодом:
    cmake_minimum_required (ВЕРСИЯ 3.24)
    project(testprog)

    variable_watch("Qt5_DIR")

    if(POLICY CMP0020)
    cmake_policy(SET CMP0020 NEW)
    endif()
    if(POLICY CMP0043)
    cmake_policy(SET CMP0043 NEW)
    endif()

    #necessary for QT stuff
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)

    find_package(Qt5 COMPONENTS Widgets Core SerialPort QML Quick LinguistTools Sql REQUIRED)

    #set qt5 include dirs as 'system' dirs
    include_directories(SYSTEM ${Qt5Widgets_INCLUDE_DIRS})
    include_directories(.)

    qt5_wrap_ui(UI_HEADERS
    mainwindow.ui)

    SET(PROG_SOURCES
    mainwindow.cpp
    main.cpp
    ${UI_HEADERS}
    )

    add_executable(testprog WIN32 ${PROG_SOURCES})
    qt5_use_modules(testprog Widgets Core SerialPort QuickWidgets Sql)
  • Создайте в папке с CMakeLists.txt следующие файлы (они могут быть пустыми):
    main.cpp
    mainwindow.cpp
    mainwindow.ui
  • Создайте подпапку с именем «build» и перейдите в нее.
  • В командной строке из 'build' выполните следующую команду cmake:
    cmake "-DCMAKE_CONFIGURATION_TYPES=Debug;Release;MinSizeRel;RelWithDebInfo" -DQt5_DIR=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5 -G "Visual Studio 17 2022" -A x64 ..
Это дает следующий результат:
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.41.34123.0
-- The CXX compiler identification is MSVC 19.41.34123.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Debug Log at CMakeLists.txt:21 (find_package):
Variable "Qt5_DIR" was accessed using READ_ACCESS with value
"C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5".

CMake Debug Log at CMakeLists.txt:21 (find_package):
Variable "Qt5_DIR" was accessed using READ_ACCESS with value
"C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5".

-- Configuring done (4.0s)
-- Generating done (0.2s)
-- Build files have been written to: C:/Users/Documents/git/testcmakeqt/build
  • Просмотр содержимого кэша
    cmake -L
что показывает, что Qt5_DIR отсутствует:
-- Cache values
CMAKE_INSTALL_PREFIX:PATH=C:/Program Files/testprog
Qt5Core_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Core
Qt5Gui_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Gui
Qt5LinguistTools_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5LinguistTools
Qt5Network_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Network
Qt5QML_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Qml
Qt5Qml_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Qml
Qt5QuickWidgets_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5QuickWidgets
Qt5Quick_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Quick
Qt5SerialPort_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5SerialPort
Qt5Sql_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Sql
Qt5Widgets_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Widgets
  • Вместо этого настройте проект с помощью графического интерфейса CMake и обратите внимание, что Qt5_DIR все еще присутствует после его указания там.
    cmake -L
вывод:
-- Cache values
CMAKE_BACKWARDS_COMPATIBILITY:STRING=2.4
CMAKE_CONFIGURATION_TYPES:STRING=Debug;Release;MinSizeRel;RelWithDebInfo
CMAKE_INSTALL_PREFIX:PATH=C:/Program Files/Project
EXECUTABLE_OUTPUT_PATH:PATH=
LIBRARY_OUTPUT_PATH:PATH=
Qt5Core_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Core
Qt5Gui_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Gui
Qt5LinguistTools_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5LinguistTools
Qt5Network_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Network
Qt5QML_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Qml
Qt5Qml_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Qml
Qt5QuickWidgets_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5QuickWidgets
Qt5Quick_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Quick
Qt5SerialPort_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5SerialPort
Qt5Sql_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Sql
Qt5Widgets_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5Widgets
Qt5_DIR:PATH=C:/Qt/Qt5.12.12/5.12.12/msvc2017_64/lib/cmake/Qt5


Подробнее здесь: https://stackoverflow.com/questions/793 ... mmand-line
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»