1. macOS、iOS、tvOS 和 watchOS 平台
这些平台特有的特性包括支持创建通用的二进制文件(binaries)、框架(frameworks)和包(bundles)。
1.1 源码与二进制包
源包中提供的 qmake 版本配置与二进制包中提供的 qmake 稍不同,因为它使用不同的功能规范。当源包通常使用 macx-g++ 规范时,二进制包通常配置为使用 macx-xcode 规范。
两种包的用户都可以通过使用 -spec 选项调用 qmake 来覆盖此配置(有关更多信息,请参见 运行 qmake)。例如,要使用来自二进制包中的 qmake 在项目目录中创建 Makefile,可以调用以下命令:
qmake -spec macx-g++
1.2 使用框架
qmake 能够自动生成生成规则,用于针对位于 /Library/Frameworks/ 的 macOS 标准框架目录中的框架进行链接
标准框架目录以外的目录需要指定到生成系统,这是通过将链接器选项追加到 LIBS 变量来实现的,如以下示例所示:
LIBS += -F/path/to/framework/directory/
框架本身是通过附加 -framework 选项和框架的名称到 LIBS 变量来链接的:
LIBS += -framework TheFramework
1.3 创建框架
可以对任何给定的库项目进行配置,以便将生成的库文件放置在 framework 中,以便部署。为此,可以设置项目使用 lib
template ,并将 lib_bundle 选项添加到 CONFIG 变量:
TEMPLATE = lib
CONFIG += lib_bundle
与库关联的数据是使用 QMAKE_BUNDLE_DATA 变量指定的。它包含将与库包一起安装的项,通常用于指定头文件集合,如下面的示例所示:
FRAMEWORK_HEADERS.version = Versions
FRAMEWORK_HEADERS.files = path/to/header_one.h path/to/header_two.h
FRAMEWORK_HEADERS.path = Headers
QMAKE_BUNDLE_DATA += FRAMEWORK_HEADERS
我们可以使用 FRAMEWORK_HEADERS 变量指定特定框架所需的头文件。将其追加到 QMAKE_BUNDLE_DATA 变量可确保将这些头文件的信息添加到将与库一起安装的资源集合中。此外,框架名称和版本由 QMAKE_FRAMEWORK_BUNDLE_NAME 和 QMAKE_FRAMEWORK_VERSION 变量指定。默认情况下,用于这些变量的值是从 TARGET 变量和 VERSION 变量获取的。
有关部署应用程序和库的详细信息,请参阅 Qt for macOS - Deployment
1.4 创建和移动 Xcode 项目
macOS上的开发人员可以利用 qmake 对 Xcode 项目文件的支持,正如 Qt for macOS 文档中所描述的那样。通过运行 qmake 从现有的 qmake 项目文件生成 Xcode 项目。例如:
qmake -spec macx-xcode project.pro
注意: 如果以后将项目移动到磁盘上,则必须再次运行 qmake 来处理项目文件并创建一个新的 Xcode 项目文件。
1.5 同时支持两个构建目标
实现这一点目前是不可行的,因为 Xcode 的活动构建配置概念与 qmake 的构建目标概念在概念上是不同的。
Xcode 活动构建配置设置用于修改 Xcode 配置、编译器标志和类似的构建选项。与 Visual Studio 不同,Xcode 不允许根据选择的是调试还是发布构建配置来选择特定的库文件。qmake 调试和发布设置控制哪些库文件链接到可执行文件。
目前无法从 qmake 生成的 Xcode 项目文件中设置 Xcode 配置设置中的文件。库在 Xcode 构建系统的框架和库阶段的链接方式。
此外,所选的活动构建配置存储在 .pbxuser 文件中,该文件是由 Xcode 在第一次加载时生成的,而不是由 qmake 创建的。
2. Windows 平台
该平台特有的特性包括支持 Windows 资源文件(提供的或自动生成的)、创建 Visual Studio 项目文件,以及在部署使用 Visual Studio 2005 或更高版本开发的 Qt 应用程序时处理清单文件。
2.1 添加 Windows 资源文件
本节介绍如何使用 qmake 处理 Windows 资源文件,使其链接到应用程序可执行文件(EXE)或动态链接库(DLL)。qmake 可以有选择地自动生成一个适当填充的 Windows 资源文件。
一个链接的 Windows 资源文件可以包含许多元素,这些元素可以通过它的 EXE 或 DLL 来访问。但是,Qt 资源系统 应该用于以独立于平台的方式访问链接的资源。但是链接的 Windows 资源文件的一些标准元素可以被 Windows 本身访问。例如,在 Windows 资源管理器中,文件属性的版本选项卡由资源元素填充。此外,EXE 的程序图标是从这些元素中读取的。因此,Qt 创建的 Windows EXE 或 DLL 同时使用这两种技术是一个很好的实践:通过 Qt 资源系统 链接平台无关的资源,并通过 Windows 资源文件添加 Windows 特定的资源。
通常,资源定义脚本(将 .rc 文件编译为 Windows 资源文件。在 Microsoft 工具链中,RC 工具生成一个 .res 文件,该文件可以通过 Microsoft 链接器链接到 EXE 或 MinGW 工具链使用 windres 工具生成一个 .o 文件,该文件可以通过 MinGW 链接器链接到 EXE 或 DLL
通过设置至少一个系统变量 VERSION 和 RC_ICONS, qmake 可选地自动生成适当填充的 .rc 文件。生成的 .rc 文件被自动编译并链接。添加到 .rc 文件的元素由系统变量 QMAKE_TARGET_COMPANY, QMAKE_TARGET_DESCRIPTION, QMAKE_TARGET_COPYRIGHT, QMAKE_TARGET_PRODUCT, RC_CODEPAGE, RC_ICONS, RC_LANG 和 VERSION
定义
如果这些元素还不够,qmake 有两个系统变量 RC_FILE 和 RES_FILE,它们直接指向外部创建的 .rc 或 .res 文件。通过设置这些变量之一,指定的文件被链接到 EXE 或 DLL
注意:如果设置 RC_FILE 或 RES_FILE , qmake 生成 .rc 文件的过程将被阻塞。在这种情况下,qmake 不会对给定的 .rc 文件或 .res 或 .o 文件进行进一步的修改;与 .rc 文件生成相关的变量将不起作用
2.2 创建 Visual Studio 项目文件
本节介绍如何将现有的 qmake 项目导入 Visual Studio。qmake 能够获取一个项目文件并创建一个包含开发环境所需的所有必要信息的 Visual Studio 项目。这是通过将 qmake 项目模板 template 设置为 vcapp
(用于应用程序项目)或 vclib
(用于库项目)来实现的。
这也可以通过命令行选项来设置,例如:
qmake -tp vc
可以递归地生成子目录中的 .vcproj
文件和主目录中的 .sln
文件,只需输入:
qmake -tp vc -r
每次更新项目文件时,我们都需要运行 qmake 来生成更新的 Visual Studio 项目
注意:如果我们正在使用 Visual Studio 附加程序,请选择 Qt > Import from .pro file 导入 .pro
文件
2.3 Visual Studio Manifest 文件
在部署使用 Visual Studio 2005 或其更高版本构建的 Qt 应用程序时,请确保正确处理了在链接应用程序时创建的清单文件。对于生成 dll 的项目,这是自动处理的。
删除嵌入到应用程序可执行文件的清单可以通过以下 CONFIG 变量的赋值来完成:
CONFIG -= embed_manifest_exe
此外,可以通过以下 CONFIG 变量的赋值来删除嵌入 dll 的清单:
CONFIG -= embed_manifest_dll
更详细的内容请查阅Windows部署指南。