关于qmake的跨平台说明
基本的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模板,并将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变量获得的。
有关部署应用程序和库的更多信息,请参见macOS的Qt-部署。
创建和移动Xcode项目
如Qt关于macOS文档中所述,macOS上的开发人员可以利用对Xcode项目文件的qmake支持。通过运行qmake从现有qmake项目文件生成Xcode项目。例如:
qmake -spec macx-xcode project.pro
注意:如果以后将项目移到磁盘上,则必须再次运行qmake来处理该项目文件并创建一个新的Xcode项目文件。
同时支持两个构建目标
目前尚无法实现,因为Active Build Configurations的Xcode概念在概念上与qmake的构建目标概念不同。
Xcode活动构建配置设置用于修改Xcode配置、编译器标记和类似的构建选项。与Visual Studio不同,Xcode不允许根据选择的是调试构建配置还是发布构建配置来选择特定的库文件。qmake调试和释放设置控制哪些库文件链接到可执行文件。
目前不能从qmake生成的Xcode项目文件中设置Xcode配置文件。在Xcode构建系统的框架和库阶段,库的链接方式。
此外,选择的活动构建配置存储在.pbxuser文件中,该文件是由Xcode在第一次加载时生成的,而不是由qmake创建的。
Windows平台
该平台特有的功能包括:支持Windows资源文件(已提供或自动生成),创建Visual Studio项目文件以及在部署使用Visual Studio 2005或更高版本开发的Qt应用程序时处理清单文件。
添加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或DLL。该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文件生成有关的变量无效。
创建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加载项,请选择Qt > 从.pro文件导入以导入.pro
文件。
Visual Studio清单文件
部署使用Visual Studio 2005或更高版本构建的Qt应用程序时,请确保正确处理了链接应用程序时创建的清单文件。对于生成DLL的项目,这是自动处理的。
可以通过对CONFIG变量进行以下分配来删除应用程序可执行文件的清单嵌入:
CONFIG -= embed_manifest_exe
同样,可以通过对CONFIG
变量进行以下分配来删除DLL的清单嵌入:
CONFIG -= embed_manifest_dll
Windows部署指南中对此进行了更详细的讨论。