qmake 集成

Qt IVI 生成器完全集成到 qmake 中,用于生成项目的一部分或全部。

在其最简单的形式中,qmake 可以生成所有源代码,项目只需要配置要构建的项目类型。

对于复杂的设置,您可以结合生成的代码与特定应用的代码以扩展和使用生成的代码。

示例

CONFIG += ivigenerator

QT_FOR_CONFIG += ivicore
!qtConfig(ivigenerator): error("No ivigenerator available")

QFACE_FORMAT = frontend
QFACE_SOURCES = example.qface
QFACE_MODULE_NAME = myModule
QFACE_OUTPUT_DIR = myOutputDir
QFACE_ANNOTATIONS = annotation.yaml

以下 qmake 变量可用

QFACE_FORMAT前端(默认),simulator_backend
QFACE_SOURCES单个 .qface 输入文件。
QFACE_MODULE_NAME可选。使用生成的代码的模块的名称。
QFACE_OUTPUT_DIR生成的代码放置的输出文件夹。默认位置是当前构建文件夹。
QFACE_ANNOTATIONS额外的注释文件的列表,格式为 YAML。更多信息请参阅注释选项
QFACE_IMPORT_PATH导入路径的列表,在 IDL 文件使用导入语句时被考虑。更多信息请参阅导入选项

有关生成器命令行参数的更多详细信息,请参阅使用生成器

注意:由于 ivigenerator 有特定的系统依赖项,它不一定在所有 QtIviCore 安装中可用。在这种情况下,ivigenerator 的 qmake 功能也不可用,这可能导致构建错误。

在这种情况下,使用以下代码段确保构建停止并提供有意义的错误消息

QT_FOR_CONFIG += ivicore
!qtConfig(ivigenerator): error("No ivigenerator available")

QtModule 支持

qmake 集成还支持生成您可以将代码编译成 Qt 模块的代码。由于此模块需要更紧密地与 Qt 的模块构建系统协作,不应使用 CONFIG 变量来加载,而应使用 load() 函数。 ivigenerator_qt_module 功能替换了 load(qt_module) 调用。

以下说明了您如何集成 QtIviVehicleFunctions 模块

TARGET = QtIviVehicleFunctions
QT = core core-private ivicore ivicore-private
CONFIG += c++11 ivigenerator

QT_FOR_CONFIG += ivicore
!qtConfig(ivigenerator): error("No ivigenerator available")

...

QFACE_MODULE_NAME = QtIviVehicleFunctions
QFACE_SOURCES += ivivehiclefunctions.qface

load(ivigenerator_qt_module)

除了模块库的项目文件之外,还需要更改 sync.profile,因为它用于调用生成转发头文件的 syncqt.pl 脚本。通常,sync.profile 设置为在源文件夹中查找这些头文件。使用 $out_basedir,您还可以将脚本扩展到在构建文件夹中进行查找。

...
%modules = ( # path to module name map
    "QtIviVehicleFunctions" => "$basedir/src/ivivehiclefunctions;$out_basedir/src/ivivehiclefunctions"
);
...

©2020 The Qt Company Ltd. 本文档中的贡献为各自所有者的版权。提供的文档根据 Free Software Foundation 发布的 GNU Free Documentation License version 1.3 的条款进行许可。Qt 及相关标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。