我正在尝试使用 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
我实在找不到问题所在。我按照文档的指示做了。有人能指出我做错了什么以及如何构建它吗?
我发现问题了。
首先,问题出在 URI 的命名约定上,我显然从 main.cpp 中调用了错误的 URI
如果生成了错误/有缺陷的构建,清理构建工件并不能解决问题。从 CMAKE 更改可执行文件的名称会生成一个修复该问题的构建文件。
(据我研究,我找不到任何表明,更改目标可执行文件名称将强制 cmake 生成正确的构建配置,尽管我清理了所有构建工件)