使用 CMake 构建 QtQuick 应用程序时遇到问题

问题描述 投票:0回答:1

我正在尝试使用 Qt Quick 构建一个基本的 Qt 应用程序。我正在关注文档

我的CMakeList.txt是这个

cmake_minimum_required(VERSION 3.15)

project(hello)

find_package(Qt6 COMPONENTS Gui Quick REQUIRED)

qt_standard_project_setup(REQUIRES 6.6)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(QML_IMPORT_TRACE ON)


qt_add_executable(myapp
    main.cpp
    )

qt_add_qml_module(myapp
    URI myapp
    QML_FILES
        main.qml
    )
# Manually handle MOC for main.cpp
qt6_generate_moc(main.cpp main.moc) 

target_link_libraries(myapp PRIVATE Qt6::Gui Qt6::Quick)

在此之后,我按照 documentation 尝试生成 cmake 构建文件

cmake -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="D:/Dev_Install/Qt/6.6.1/mingw_64" -S . -B "./CMakeExtras"

我得到了这个:

-- The C compiler identification is GNU 13.2.0
-- The CXX compiler identification is GNU 13.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/gcc.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:/msys64/mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)
-- Configuring done (3.9s)
-- Generating done (0.1s)
-- Build files have been written to: E:/Coding Dungeon/Qt Course/Trying C++ with qml/Try/CMakeExtras

此后我用了这个:

cmake --build .\CMakeExtras\

我明白了:

[  5%] Generating .rcc/qmlcache/myapp_qmlcache_loader.cpp
[  5%] Built target myapp_autogen_timestamp_deps
[ 10%] Running qmlimportscanner for myapp
[ 10%] Built target myapp_qmlimportscan
[ 15%] Built target myapp_tooling
[ 20%] Automatic MOC and UIC for target myapp
[ 20%] Built target myapp_autogen
[ 25%] Running AUTOMOC file extraction for target myapp
[ 25%] Built target myapp_automoc_json_extraction
[ 30%] Automatic QML type registration for target myapp
Error 5 while parsing E:/Coding Dungeon/Qt Course/Trying C++ with qml/Try/CMakeExtras/meta_types/qt6myapp_metatypes.json: illegal value
mingw32-make[2]: *** [CMakeFiles\myapp.dir\build.make:88: myapp_qmltyperegistrations.cpp] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:99: CMakeFiles/myapp.dir/all] Error 2
mingw32-make: *** [Makefile:90: all] Error 2

我实在找不到问题所在。我按照文档的指示做了。有人能指出我做错了什么以及如何构建它吗?

c++ qt cmake qt-quick qt6
1个回答
0
投票

我发现问题了。

  • 首先,问题出在 URI 的命名约定上,我显然从 main.cpp 中调用了错误的 URI

  • 如果生成了错误/有缺陷的构建,清理构建工件并不能解决问题。从 CMAKE 更改可执行文件的名称会生成一个修复该问题的构建文件。

(据我研究,我找不到任何表明,更改目标可执行文件名称将强制 cmake 生成正确的构建配置,尽管我清理了所有构建工件)

© www.soinside.com 2019 - 2024. All rights reserved.