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. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。