平台注意事项
qmake 的基本配置功能可以处理许多跨平台项目。不过,在某些平台上,利用特定平台的功能有时是有用的,甚至是必要的。qmake 知道其中许多功能,可以通过特定变量访问这些功能,这些变量只在与之相关的平台上生效。
macOS、iOS、tvOS 和 watchOS
这些平台的特定功能包括支持创建通用二进制文件、框架和捆绑包。
源码包和二进制包
源码包中提供的 qmake 版本与二进制包中提供的 qmake 版本配置略有不同,因为它使用了不同的功能规范。源码包通常使用macx-g++
规范,而二进制包通常配置为使用macx-xcode
规范。
每个软件包的用户都可以通过调用带有-spec
选项的 qmake 来覆盖这一配置(更多信息请参阅运行 qmake)。例如,要使用二进制软件包中的 qmake 在项目目录中创建 Makefile,请调用以下命令:
qmake -spec macx-g++
使用框架
qmake 能够自动生成联编规则,以便与 macOS 标准框架目录下的框架进行联编,该目录位于/Library/Frameworks/
。
需要向联编系统指定标准框架目录以外的目录,这可以通过向LIBS变量添加链接器选项来实现,如下例所示:
LIBS += -F/path/to/framework/directory/
将-framework
选项和框架名称追加到LIBS变量中,即可链接框架本身:
LIBS += -framework TheFramework
创建框架
可以对任何给定的库项目进行配置,以便将生成的库文件放入框架中,以备部署。为此,可将项目设置为使用lib
模板,并在CONFIG变量中添加lib_bundle
选项:
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。
创建和移动 Xcode 项目
在 macOS 上,开发人员可以从现有的 qmake 项目文件生成 Xcode 项目文件。例如
qmake -spec macx-xcode project.pro
注意: 如果后来在磁盘上移动了项目,则必须再次运行 qmake 来处理项目文件并创建新的 Xcode 项目文件。
同时支持两个构建目标
由于 Xcode 的主动构建配置(Active Build Configurations)概念与 qmake 的构建目标(Build Target)概念不同,因此目前还无法实现这一功能。
Xcode 的 Active Build Configurations 设置用于修改 Xcode 配置、编译器标志和类似的构建选项。与 Visual Studio 不同,Xcode 不允许根据调试或发布构建配置选择特定的库文件。qmake 调试和发布设置可控制链接到可执行文件的库文件。
目前无法通过 qmake 生成的 Xcode 项目文件在 Xcode 配置设置中设置文件。在 Xcode 构建系统中的框架与库阶段,链接库的方式。
此外,所选的Active Build Configuration保存在 .pbxuser 文件中,该文件由 Xcode 在首次加载时生成,而非由 qmake 创建。
Windows
该平台特有的功能包括支持 Windows 资源文件(提供或自动生成)、创建 Visual Studio 项目文件,以及在部署使用 Visual Studio 2005 或更高版本开发的 Qt 应用程序时处理清单文件。
添加 Windows 资源文件
本节介绍如何使用 qmake 处理 Windows 资源文件,使其链接到应用程序可执行文件 (EXE) 或动态链接库 (DLL)。
链接的 Windows 资源文件可能包含许多可由 EXE 或 DLL 访问的元素。不过,Qt 资源系统应该用于以平台无关的方式访问链接的资源。但链接的 Windows 资源文件中的某些标准元素是由 Windows 本身访问的。例如,在 Windows 资源管理器中,文件属性的版本选项卡由资源元素填充。此外,EXE 的程序图标也是从这些元素中读取的。因此,Qt 创建的 Windows EXE 或 DLL 最好同时使用两种技术:通过Qt 资源系统链接与平台无关的资源,并通过 Windows 资源文件添加 Windows 特定资源。
通常,资源定义脚本(.rc 文件)会被编译成 Windows 资源文件。在 Microsoft 工具链中,RC 工具会生成一个 .res 文件,该文件可通过 Microsoft 链接器链接为 EXE 或 DLL。MinGW 工具链使用 windres 工具生成 .o 文件,该文件可与 MinGW 链接器链接为 EXE 或 DLL。
通过设置系统变量VERSION和RC_ICONS 中的至少一个,可选择由 qmake 自动生成适当填充的 .rc 文件。生成的 .rc 文件会自动编译和链接。添加到 .rc 文件的元素由系统变量rc 文件中添加的元素由系统变量QMAKE_TARGET_COMPANY、QMAKE_TARGET_ DESCRIPTION、QMAKE_TARGET_COPYRIGHT、QMAKE_TARGET_PRODUCT、QMAKE_TARGET_ORIGINAL_FILENAME、QMAKE_TARGET_INTERNALNAME、QMAKE_TARGET_COMMENTS、QMAKE_TARGET_TRADEMARKS、QMAKE_MANIFEST、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 文件生成相关的变量也不起作用。
创建 Visual Studio 项目文件
本节介绍如何将现有的 qmake 工程导入 Visual Studio。qmake 能接收工程文件并创建 Visual Studio 工程,其中包含开发环境所需的所有必要信息。这可以通过将 qmake项目模板设置为vcapp
(针对应用程序项目)或vclib
(针对库项目)来实现。
例如,也可以使用命令行选项来设置:
qmake -tp vc
可以在子目录中递归生成.vcproj
文件,并在主目录中生成.sln
文件,方法是键入 :
qmake -tp vc -r
每次更新项目文件时,都需要运行 qmake 来生成一个更新的 Visual Studio 项目。
注意: 如果使用的是 Visual Studio Add-in,请选择Qt>Import from .pro file来导入.pro
文件。
Visual Studio 清单文件
在部署使用 Visual Studio 2005 或更高版本构建的 Qt 应用程序时,请确保正确处理应用程序链接时创建的清单文件。生成 DLL 的项目会自动处理该文件。
可以通过对CONFIG变量的以下赋值来移除应用程序可执行文件的清单嵌入:
CONFIG -= embed_manifest_exe
此外,还可以通过对CONFIG
变量的以下赋值来删除 DLL 的清单嵌入:
CONFIG -= embed_manifest_dll
Windows 部署指南中对此有更详细的讨论。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.