C

生成 CMake 项目

本页介绍了有关生成 CMake 项目的附加信息。

注意:有关 Qt Quick Ultralite 项目生成的通用说明,请参阅详情

CMake 项目的初始导出

构建对 qmlprojectexporter 的调用

选项描述
${QUL_DIR}/bin/qmlprojectexporter要调用的工具。
path/to/some.qmlproject要导出的 QML 项目文件。
--platform <platform_name>要导出的平台名称。
--project-type cmake使用 CMake 输出项目格式。
--toolchain <compiler_id>这提供了关于生成的选项应兼容哪种编译器类型的信息。可能选项有 gnughsiarmsvc

注意:对所有 GCC 兼容的编译器,请使用 "gnu"。

--cxx-standard <C++ standard>可选地指定处理 QML 项目文件 InterfaceFiles 区块中列出的接口文件时应使用的 C++ 标准。
--outdir <path>项目将被导出的路径。
--include-ide-generated-hw-code
--ide-sources-outdir <outdir>
要包括第三方平台代码导出,请使用这两个选项。输出目录可以位于平台输出目录内。例如 <platform_outdir>/QtMCUs/platform,但任何其他位置也可以。在导出到第三方 IDE(如 STM32CubeIDE 或 MCUXpresso IDE)时,您可能希望跳过这些选项。
--generate-entrypoint提供此可选选项将生成一个带有默认代码以运行您的 QML 应用程序的主函数。
--boarddefaults=<qul_dir>/platform/boards/<platform>/cmake/BoardDefaults_32bpp_default.qmlprojectconfig需要为每块板提供板级默认设置以提供有关颜色深度和资产格式的信息。
--selector a[,b...]如果您的 QML 项目使用选择器来查找 QML 文件和资源,请将这些作为以逗号分隔的列表提供。

自定义构建 Qt Quick Ultralite 库的选项

要创建平台导出的元数据,您必须启用元数据创建。在您的 Qt Quick Ultralite 构建目录下,在 .cmake/api/v1/query/codemodel-v2 下创建一个空文件和必要的文件夹。运行 CMake 重新配置和再次构建。

选项描述
--qul-source-dir ${QUL_DIR}Qt Quick Ultralite 的源树。这仅在您的 Qt Quick Ultralite 工具位于自定义位置时才需要提供。
--qul-build-dir <dir>Qt Quick Ultralite 核心库的构建目录。如果您正在(重新)构建 Qt Quick Ultralite 核心库,则必须提供该目录。
--verbose可选地,在运行 qmlprojectexporter 时显示详细命令。
--platform-boards-sources-dir=<dir>如果板级源不在 ${QUL_DIR}/platform/boards 中,请使用此选项指定路径。

创建一个 CMake 项目文件

使用上面描述的命令导出一个项目后,输出文件夹中将创建一个 CMake 包。

要使用此包,需要在您的 CMake 项目中添加一些行。

project(<name> LANGUAGES C CXX ASM)

ASM 是重要的,因为根据您的平台/编译器,导出将生成汇编文件。如果没有这个选项,CMake 将无声地丢弃所有汇编文件,不发出任何通知。

find_package(QulExport REQUIRED PATHS "<exported_path>" NO_DEFAULT_PATH)

这将把导出的信息加载到您当前项目中。给 find_package() 使用的 PATHS 变量必须指向项目导出的路径。

导出的信息提供在 CMake 变量列表中,并必须添加到您的 CMake 目标中。有关这些变量的详细信息,请参阅下一章。

target_sources(<my_target> PRIVATE ${QulExport_SOURCES})
target_compile_definitions(<my_target> PRIVATE ${QulExport_DEFINITIONS})
target_include_directories(<my_target> PRIVATE ${QulExport_INCLUDES})
target_compile_options(<my_target> PRIVATE ${QulExport_COMPILE_OPTIONS})
target_link_options(<my_target> PRIVATE ${QulExport_LINK_OPTIONS})
target_link_libraries(<my_target> PRIVATE ${QulExport_LIBRARIES})

如果您的构建系统不处理链接器部分,您必须将提供的链接器脚本添加到选项中。

foreach(LINKER_SCRIPT IN LISTS QulExport_LINKER_SCRIPTS)
    if (IAR)
        target_link_options(mcu_minimal PRIVATE "SHELL:--config ${LINKER_SCRIPT}")
    else()
        target_link_options(mcu_minimal PRIVATE "SHELL:-T ${LINKER_SCRIPT}")
    endif()
    set_target_properties(mcu_minimal PROPERTIES LINK_DEPENDS "${LINKER_SCRIPT}")
endforeach()

关于暴露的 CMake 变量的详细信息

find_package() 之后,所有源和标志都通过变量暴露。

find_package(QulExport REQUIRED PATHS "<exported_path>" NO_DEFAULT_PATH)
  • QulExport_SOURCES 包含要编译的 C/C++/ASM 源文件列表。
  • QulExport_DEFINITIIONS 包含要设置的必需编译器定义列表。
  • QulExport_INCLUDES 包含包含路径列表。
  • QulExport_COMPILE_OPTIONS 包含必需的编译器选项列表。
  • QulExport_LINK_OPTIONS 包含必需的链接器选项列表。
  • QulExport_LIBRARIES 包含要链接的库列表。
  • QulExport_LINKER_SCRIPTS 包含用于链接的链接器脚本列表。

高级用户

对于像上一章中那样的组合变量不充分的情况,还存在进一步详细分解每个 Qt Quick Ultralite 组件暴露信息的变量。这些变量遵循相同的命名约定,但增加了组件。

导出应用的信息在以下部分暴露:

  • QulExport_APPLICATION_SOURCES
  • QulExport_APPLICATION_DEFINITIONS
  • QulExport_APPLICATION_INCLUDES
  • QulExport_APPLICATION_LIBRARIES
  • QulExport_APPLICATION_COMPILE_OPTIONS
  • QulExport_APPLICATION_LINK_OPTIONS
  • QulExport_APPLICATION_LINKER_SCRIPTS

导出平台端口的信息在以下部分暴露:

  • QulExport_PLATFORM_SOURCES
  • QulExport_PLATFORM_DEFINITIONS
  • QulExport_PLATFORM_INCLUDES
  • QulExport_PLATFORM_LIBRARIES
  • QulExport_PLATFORM_COMPILE_OPTIONS
  • QulExport_PLATFORM_LINK_OPTIONS
  • QulExport_PLATFORM_LINKER_SCRIPTS

未分配给应用程序或平台的通用信息在以下部分暴露:

  • QulExport_GENERIC_SOURCES
  • QulExport_GENERIC_DEFINITIONS
  • QulExport_GENERIC_INCLUDES
  • QulExport_GENERIC_LIBRARIES
  • QulExport_GENERIC_COMPILE_OPTIONS
  • QulExport_GENERIC_LINK_OPTIONS
  • QulExport_GENERIC_LINKER_SCRIPTS

当 QML 项目导出命令包含 --generate-entrypoint 选项时,还会暴露生成的主要函数信息。

  • QulExport_ENTRYPOINT_ITEM 包含主 QML 元素的名称。
  • QulExport_ENTRYPOINT_NAME 包含主函数的名称。
  • QulExport_ENTRYPOINT_FUNCTION 包含带签名的函数名称。
  • QulExport_ENTRYPOINT_PROTOTYPE 包含主函数的原型。
  • QulExport_ENTRYPOINT_FILEPATH包含包含主函数的源文件路径。

自动生成的CMake项目

当导出QML应用程序时,qmlprojectexporter将生成可直接使用的CMakeLists.txt文件。CMake目标名称由--project-target-name指定,如果省略,则默认为QML项目名称。此文件可能用于add_subdirectory(),但主要用于演示目的。将导出集成到CMake中的主要方法是上述描述的find_package()方法。

没有平台的导出项目集成

在Zephyr和ESP-IDF之类的构建系统上,平台代码来自构建系统。在这种情况下,只需导出QML应用程序和自定义构建的Qt Quick Ultralite核心库。

按照从源代码构建Qt Quick Ultralite中描述的方法构建和安装您的自定义架构构建。

mkdir -p <builddir>/.cmake/api/v1/query && touch <builddir>/.cmake/api/v1/query/codemodel-v2
cmake
    -S $QUL_ROOT
    -B <builddir>
    -DQul_ROOT=$QUL_ROOT
    -DQUL_TARGET_TOOLCHAIN_DIR=<toolchaindir>
    -DQUL_GENERATORS=$QUL_ROOT/lib/cmake/Qul/QulGenerators.cmake
    -DCMAKE_TOOLCHAIN_FILE=$QUL_ROOT/lib/cmake/Qul/toolchain/armgcc.cmake
    -DQUL_PLATFORM_ARCHITECTURE=cortex-m7-hf-fpv5-d16
    -DQUL_BUILD_PLATFORM=OFF
    -DCMAKE_INSTALL_PREFIX=<installdir>
    -DQUL_PLATFORM_ARCHITECTURE_FILE=$QUL_ROOT/platform/architecture/cortex-m7-hf-fpv5-d16/armgcc/architecture.cmake
make -C <builddir> install

从这个构建中,您可以将项目导出到目标构建系统

$QUL_ROOT/bin/qmlprojectexporter
    $QUL_ROOT/examples/chess/mcu_chess.qmlproject
    --boarddefaults=<path/to/>BoardDefaults_24bpp_default.qmlprojectconfig
    --toolchain GNU
    --cxx-standard=c++17
    --platform <platform_name>
    --outdir <target_dir>
    --qul-source-dir <installdir>
    --project-type cmake
    --no-export-platform
    --generate-entrypoint
    --platform-metadata <installdir>/lib/cortex-m7-hf-fpv5-d16-export.json

在此步骤之后,继续创建CMake项目文件

在特定的Qt许可证下提供
了解更多信息。