附录B:从其他构建系统迁移
您可以使用qbs create-project命令从任意目录结构自动生成Qbs项目文件。这对于从qmake或CMake等其他构建工具迁移非常有用。
要使用此工具,请切换到项目目录并运行位于Qbs安装目录(或Qt Creator安装目录)的bin
目录中的qbs create-project
命令。
在生成初始.qbs文件后,如以下各节所述,请向其添加缺少的配置变量和函数。
从qmake迁移
以下各节描述了qmake变量值的Qbs等价物。
CONFIG
指定项目配置和编译器选项。
console
将Product.consoleApplication属性设置为true
以用于Application、CppApplication或QtApplication项目。例如
Application { name: "helloworld" files: "main.cpp" Depends { name: "cpp" } consoleApplication: true }
ordered
此qmake变量没有在Qbs中直接等价的变量。相反,构建顺序由产品之间的隐式和显式依赖项确定。要添加显式依赖项,请向product添加一个Depends项目
CppApplication { name: "myapp" Depends { name: "mylib" } }
产品myapp
依赖于并链接到产品mylib
,因此它在其之后构建。
qt
在qmake中,Qt依赖性是隐式的,而在Qbs中则不是。如果CONFIG -= qt
,添加一个Depends项目以指定该product依赖于cpp模块
Product {
Depends { name: "cpp" }
}
DEFINES
设置cpp.defines属性product。
注意: 要引用cpp.defines
,您必须指定对cpp模块的依赖。
Product { Depends { name: "cpp" } cpp.defines: ["SUPPORT_MY_FEATURES"] }
DESTDIR
我们建议您使用安装机制指定目标文件的位置
Application { Group { name: "Runtime resources" files: "*.qml" qbs.install: true qbs.installDir: "share/myproject" } Group { name: "The App itself" fileTagsFilter: "application" qbs.install: true qbs.installDir: "bin" } }
如果不可能,您可以使用destinationDirectory属性
DynamicLibrary { name: "mydll" destinationDirectory: "libDir" }
HEADERS, SOURCES, FORMS, RESOURCES, OTHER_FILES
将头文件、源文件、窗体、资源文件以及任何其他文件包括为Product.files或Group.files属性的值
QtApplication { name: "myapp" files: ["myapp.h", "myapp.cpp", "myapp.ui", "myapp.qrc", "readme.txt"] }
Qbs使用文件标记器来确定其正在处理的文件的类型。
ICON
在Qbs中找不到直接等效的项。如果您将一个依赖项添加到ib模块,并将.xcassets
目录作为Product.files属性的值,Qbs会在为Apple平台构建时自动处理设置应用程序图标
Application { name: "myapp" files [".xcassets"] Depends { name: "ib" } }
或者,您可以将图标名称设置为bundle.infoPlist参数的值,指定对ib模块的依赖项,并将应用程序的.icns
文件作为files属性的值添加
Application { name: "myapp" files ["myapp.icns"] Depends { name: "ib" } bundle.infoPlist: ({"CFBundleIconFile": "myapp"})
INCLUDEPATH
将包含文件路径作为cpp.includePaths属性的值添加
CppApplication { cpp.includePaths: ["..", "some/other/dir"] }
LIBS
对于项目部分中的库,使用Depends项。
要引入外部库,使用Unix的cpp.libraryPaths属性作为-L
(库路径)标志,以及cpp.dynamicLibraries和cpp.staticLibraries属性作为-l
(库)标志。
例如,LIBS += -L/usr/local/lib -lm
将变为
CppApplication { cpp.libraryPaths: ["/usr/local/lib"] cpp.dynamicLibraries: ["m"] }
OUT_PWD
使用Product.buildDirectory属性引用生成的工件的基本输出目录。
PWD
与文件作用域变量path
相对应。
_PRO_FILE_
当在项目或产品中使用时,与文件作用域变量filePath
相对应。
_PRO_FILE_PWD_
与Project.sourceDirectory或Product.sourceDirectory属性相对应。
QMAKE_ASSET_CATALOGS
将一个依赖项添加到ib模块,并将.xcassets
目录作为files属性的值添加
Application { name: "myapp" files [".xcassets"] Depends { name: "ib" } }
QMAKE_BUNDLE_DATA
目前,您可以使用安装机制手动将文件放置在正确的位置。更好的解决方案正在开发中。
QMAKE_BUNDLE_EXTENSION
设置bundle.extension属性。
注意:与qmake不同,Qbs会自动将点(.)预置于属性值之前。
QMAKE_{C,CXX,OBJECTIVE}_CFLAGS{_DEBUG,_RELEASE}
使用cpp.commonCompilerFlags属性或与每个编译器标志变量对应的属性。
qmake变量 | cpp模块属性 |
---|---|
QMAKE_CFLAGS_DEBUG
| cpp.cFlags |
QMAKE_CXXFLAGS_DEBUG
| cpp.cxxFlags |
QMAKE_OBJECTIVE_CFLAGS | cpp.objcFlags |
使用属性项或简单的条件作为qbs.buildVariant属性的值,以模拟qmake变量的_DEBUG
和_RELEASE
变体。
QMAKE_FRAMEWORK_BUNDLE_NAME
设置 bundle(bundleName) 属性(从 Product.targetName 继承)和 bundle.extension。
QMAKE_FRAMEWORK_VERSION
设置 bundle.frameworkVersion 属性。
QMAKE_INFO_PLIST
将 info.plist
文件作为 files 属性的值,并指定对 bundle 模块的依赖。
Application { name: "myapp" files ["info.plist"] Depends { name: "bundle" } }
Qbs 将自动将任何必要的属性添加到您的 Info.plist
文件中。通常,它从项目的其他属性中确定适当的值,因此您不需要使用 Info.plist.in > Info.plist
配置机制。此外,您几乎不需要在源 Info.plist
文件中嵌入占位符。将 bundle.processInfoPlist 属性设置为 false
以禁用此行为。
\\ ... bundle.processInfoPlist: false
除了或代替使用实际的 Info.plist
文件外,您还可以使用 bundle.infoPlist 属性添加 Info.plist
属性。例如
\\ ... bundle.infoPlist: ({ "NSHumanReadableCopyright": "Copyright (c) 2017 Bob Inc", "Some other key", "Some other value, & XML special characters are no problem! >;) 非凡!" })
QMAKE_LFLAGS
为 product 设置 cpp.linkerFlags 属性。
QMAKE_{MACOSX,IOS,TVOS,WATCHOS}_DEPLOYMENT_TARGET
对于每个 qmake 部署目标变量,使用 cpp 模块的对应属性。
qmake变量 | cpp模块属性 |
---|---|
QMAKE_MACOSX_DEPLOYMENT_TARGET | cpp.minimumMacosVersion |
QMAKE_IOS_DEPLOYMENT_TARGET | cpp.minimumIosVersion |
QMAKE_TVOS_DEPLOYMENT_TARGET | cpp.minimumTvosVersion |
QMAKE_WATCHOS_DEPLOYMENT_TARGET | cpp.minimumWatchosVersion |
QMAKE_RPATHDIR
为 product 设置 cpp.rpaths 属性。
QMAKE_SONAME_PREFIX
为 product 使用 cpp.sonamePrefix 属性。
QML_IMPORT_PATH
仅用于 Qt Creator QML 语法高亮。在 Product、Application、CppApplication 或 QtApplication 中,创建一个 qmlImportPaths
属性
Product { name: "myProduct" property stringList qmlImportPaths: [sourceDirectory + "/path/to/qml/"] }
QT
向 product 添加一个 Depends 元素,指定对 Qt 模块的依赖。例如
QtApplication { Depends { name: "Qt.widgets" } }
您还可以使用以下等效于上一个的格式
QtApplication { Depends { name: "Qt"; submodules: "widgets" } }
QTPLUGIN
构建静态应用程序通常需要链接到静态 QPA 插件,例如 qminimal
。您可以使用以下语法启用 Qbs 链接所需的插件
QtApplication { name: "myapp" Depends { name: "Qt"; submodules: ["core", "gui", "widgets"] } Depends { name: "Qt.qminimal"; condition: Qt.core.staticBuild } }
RC_FILE
将 Windows 资源文件添加到 Product.files 属性的值。
TARGET
使用 Product.targetName 属性指定目标实体的基本文件名。
TEMPLATE
app
CppApplication { name: "helloworld" files: "main.cpp" }
这与以下内容大致相同
Product { name: "helloworld" type: "application" files: "main.cpp" Depends { name: "cpp" } }
lib
根据.pro文件中CONFIG参数的值决定使用动态库或静态库作为产品,如果值为shared
DynamicLibrary { name: "mydll" files: ["mySourceFile.cpp"] Depends { name: "cpp" } }
subdirs
Project { references: [ "app/app.qbs", "lib/lib.qbs" ] }
message(), warning(), error(), log()
您可以使用控制台API将信息、警告、错误和日志消息打印到控制台。
Product { name: { console.info("--> now evaluating the product name"); return "theName"; } Depends { name: "cpp" } cpp.includePath: { throw "An error occurred." } }
©2023 The Qt Company Ltd. 此处包含的文档贡献均为各自所有者的版权。提供的文档根据GNU自由文档许可证1.3版进行许可,该许可证由自由软件基金会发布。Qt及其相关标志在芬兰和/或其他国家和地区是The Qt Company Ltd的商标。所有其他商标均属于其各自所有者。