一、Qt项目文件pro创建规则
qmake使用的项目文件格式可以用于支持简单和相当复杂的构建系统。简单的项目文件使用简单的声明式风格,定义标准变量来指示项目中使用的源文件和头文件。复杂的项目可能使用控制流结构来微调构建过程。
下面几节描述项目文件中使用的不同类型的元素。
变量
在项目文件中,变量用于保存字符串列表。在最简单的项目中,这些变量通知qmake要使用的配置选项,或者提供要在构建过程中使用的文件名和路径。
注意:变量的内容可以通过在变量名前面加上$$来读取;$$操作符被广泛地用于对字符串和值列表进行操作的内置函数。有关更多信息,请参见qmake语言。
CONFIG: 指定项目配置和编译器选项。这些值由qmake在内部识别,具有特殊的意义。
下面的CONFIG值控制编译标志:
选项 | 描述 |
release | 该项目将以发布模式构建。如果还指定了debug,则最后一个将生效。 |
debug |
|
debug_and_release | 该项目准备以调试和发布模式构建。 |
debug_and_release_target | 这个选项是默认设置的。如果还设置了debug_and_release,调试和发布构建最终将位于单独的调试和发布目录中。 |
build_all | 如果指定了debug_and_release,则默认情况下,将以debug和release模式构建项目。 |
autogen_precompile_source | 自动生成一个.cpp文件,其中包括.pro文件中指定的预编译头文件。 |
ordered | 当使用subdirs模板时,此选项指定应该按照给定目录的顺序处理列出的目录。 |
precompile_header | 支持在项目中使用预编译头文件。 |
warn_on | 编译器应该输出尽可能多的警告。如果还指定了warn_off,则最后一个将生效。 |
warn_off | 编译器应该输出尽可能少的警告。 |
exceptions |
|
exceptions_off |
|
rtti | 启用了RTTI支持。默认情况下,使用编译器默认值。 |
rtti_off | RTTI支持被禁用。默认情况下,使用编译器默认值。 |
stl | 启用了STL支持。默认情况下,使用编译器默认值。 |
stl_off | 禁用STL支持。默认情况下,使用编译器默认值。 |
thread | 启用线程支持。当CONFIG包含qt时启用此功能,这是默认值。 |
c++11 | 启用c++ 11支持。如果编译器不支持c++ 11,则此选项无效。默认情况下,支持是禁用的。 |
c++14 | 启用c++ 14支持。如果编译器不支持c++ 14,则此选项无效。默认情况下,支持是禁用的。 |
depend_includepath | 启用了将INCLUDEPATH的值附加到DEPENDPATH。默认设置。 |
以下选项定义应用程序或库类型: | |
qt | 目标是Qt应用程序或库,需要Qt库和头文件。Qt库的正确包含路径和库路径将自动添加到项目中。这是默认定义的,可以使用\l{#qt}{qt}变量进行微调。 |
x11 | 目标是一个X11应用程序或库。适当的包含路径和库将自动添加到项目中。 |
testcase | 目标是一个自动化测试。检查目标将被添加到生成的Makefile中以运行测试。只在生成makefile时相关。 |
insignificant_test | 自动测试的退出代码将被忽略。仅当testcase也被设置时才相关。 |
windows | 目标是一个Win32窗口应用程序(仅限应用程序)。正确的包含路径、编译器标志和库将自动添加到项目中。 |
console | 目标是一个Win32控制台应用程序(仅应用程序)。正确的包含路径、编译器标志和库将自动添加到项目中。 |
shared | 目标是一个shared object或DLL。正确的包含路径、编译器标志和库将自动添加到项目中。注意dll也可以在所有平台上使用;将创建具有目标平台的适当后缀(.dll或.so)的共享库文件。 |
dll | |
static | 目标是一个静态库(仅限lib)。正确的编译器标志将自动添加到项目中。 |
staticlib | |
plugin | 目标是一个插件(只有lib)。这也启用了dll。 |
designer |
|
no_lflags_merge | 确保LIBS变量中存储的库列表在使用之前不会被缩减为惟一值列表。 |
这些选项只在Windows上定义特定功能: | |
flat | 当使用vcapp模板时,这将把所有源文件放到源组中,而头文件放到头组中,而不管它们位于哪个目录中。关闭此选项将根据源/头文件所在的目录将文件分组到源/头文件组中。这是默认打开的。 |
embed_manifest_dll | 将清单文件嵌入作为库项目的一部分创建的DLL中。 |
embed_manifest_exe | 将清单文件嵌入作为应用程序项目的一部分创建的EXE中。 |
以下选项只对macOS有效: | |
app_bundle | 将可执行文件放入包中(默认值)。 |
lib_bundle |
|
以下选项仅在Linux/Unix平台上有效: | |
largefile |
|
DEFINES: qmake将此变量的值添加为编译器C预处理器宏(-D选项)。
DEF_FILE: 注意:当使用app模板时,此变量仅用于Windows。
指定要包含在项目中的.def文件。
DEPENDPATH: 指定要查看以解析依赖项的所有目录的列表。此变量用于在包含的文件中爬行。
- DESTDIR: 指定目标文件的位置。
DISTFILES: 指定要包含在dist目标中的文件列表。该特性只受UnixMake规范支持。放置目标文件的位置。
DLLDESTDIR: 注意:此变量只适用于Windows目标。
指定复制目标dll的位置。
FORMS: 指定uic编译前要处理的UI文件(请参阅Qt设计器手册)。构建这些UI文件所需的所有依赖项、头文件和源文件都将自动添加到项目中。
例如:
FORMS = mydialog.ui \ mywidget.ui \ myconfig.ui
GUID: 指定.vcproj文件中设置的GUID。GUID通常是随机确定的。但是,如果需要一个固定的GUID,可以使用这个变量设置它。
此变量仅特定于.vcproj文件;否则将忽略它。
- HEADERS: 定义项目的头文件。
ICON: 此变量仅用于Mac OS上设置应用程序图标。有关更多信息,请参阅应用程序图标文档。
IDLSOURCES: 此变量仅在Windows上用于Visual Studio项目生成,以将指定的文件放入生成的文件夹中。
INCLUDEPATH:指定编译项目时应该搜索的#include目录。
INSTALLS: 指定在执行make install或类似安装过程时将安装的资源列表。列表中的每一项通常都使用属性定义,这些属性提供有关将在何处安装它的信息。
LEXIMPLS: 指定Lex实现文件列表。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
LEXOBJECTS: 指定中间Lex对象文件的名称。这个变量的值通常由qmake处理,很少需要修改。
LEXSOURCES: 指定Lex源文件列表。所有依赖项、头文件和源文件都将自动添加到项目中,以构建这些lex文件。
LIBS: 指定要链接到项目中的库的列表。如果使用Unix -l(库)和-l(库路径)标志,qmake将在Windows上正确地处理库(即将库的完整路径传递给链接器)。qmake必须存在库才能找到-l库所在的目录。
例如:unix:LIBS += -L/usr/local/lib -lmath
win32:LIBS += c:/mylibs/math.lib
LITERAL_HASH: 当变量声明中需要一个文本哈希字符(#)时,就会使用这个变量,这可能是文件名的一部分,也可能是传递给某个外部应用程序的字符串中的一部分。
MAKEFILE: 指定生成的Makefile的名称。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
MAKEFILE_GENERATOR: 指定生成Makefile时要使用的Makefile生成器的名称。这个变量的值通常由qmake在内部处理,很少需要修改。
MSVCPROJ_*:这些变量由qmake在内部处理,不应该修改或使用。
MOC_DIR: 指定应放置所有中间moc文件的目录。
OBJECTS: 此变量由SOURCES变量自动填充。每个源文件的扩展名由.o (Unix)或.obj (Win32)替换。您可以将对象添加到列表中。
OBJECTS_DIR: 指定应该放置所有中间对象的目录。
POST_TARGETDEPS: 列出目标所依赖的库。一些后端,例如Visual Studio和Xcode项目文件的生成器,不支持这个变量。通常,这些构建工具在内部支持这个变量,它对于显式列出依赖的静态库非常有用。
这个列表位于所有内置依赖项(以及$$PRE_TARGETDEPS)之后。
PRE_TARGETDEPS: 列出目标所依赖的库。一些后端,例如Visual Studio和Xcode项目文件的生成器,不支持这个变量。通常,这些构建工具在内部支持这个变量,它对于显式列出依赖的静态库非常有用。
此列表放在所有内置依赖项之前。
PRECOMPILED_HEADER: 指示用于创建预编译头文件的头文件,以提高项目的编译速度。预编译头文件目前只支持某些平台(Windows -所有MSVC项目类型,Apple - Xcode, Makefile, Unix - gcc 3.3及以上)。
PWD: 指定指向包含正在解析的当前文件的目录的完整路径。在编写项目文件以支持影子构建时,引用源树中的文件可能很有用。
也可查看:_PRO_FILE_PWD_。
注意:不要试图覆盖此变量的值。
OUT_PWD: 指定指向qmake放置生成的Makefile的目录的完整路径。
注意:不要试图覆盖此变量的值。
QMAKE: 指定qmake程序本身的名称,并将其放在生成的makefile中。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKESPEC: 包含生成makefile时使用的qmake配置的完整路径的系统变量。这个变量的值是自动计算的。
注意:不要试图覆盖此变量的值。
QMAKE_AR_CMD: 注意:此变量仅用于Unix平台。
指定创建共享库时要执行的命令。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_BUNDLE_DATA: 注意:此变量仅用于macOS、iOS、tvOS和watchOS。
指定将与库包一起安装的数据,通常用于指定头文件集合。
QMAKE_BUNDLE_EXTENSION: 注意:此变量仅用于macOS、iOS、tvOS和watchOS。
指定要用于库包的扩展名。这允许使用自定义扩展名来创建框架,而不是使用标准的.framework目录扩展名。
QMAKE_OC: 指定在构建包含C源代码的项目时将使用的C编译器。只要编译器可执行文件在处理Makefile时位于path变量中包含的路径上,就只需要指定该编译器可执行文件的文件名。
QMAKE_CFLAGS: 指定用于构建项目的C编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。可以通过分别修改QMAKE_CFLAGS_DEBUG和QMAKE_CFLAGS_RELEASE变量来调整特定于调试和发布模式的标志。
QMAKE_CFLAGS_DEBUG: 指定用于调试构建的C编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CFLAGS_RELEASE: 指定用于发布构建的C编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CFLAGS_SHLIB: 注意:此变量仅用于Unix平台。
指定用于创建共享库的编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CFLAGS_THREAD: 指定用于创建多线程应用程序的编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CFLAGS_WARN_OFF: 此变量仅在设置warn_off配置选项时使用。此变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CFLAGS_WARN_ON: 此变量仅在设置warn_on配置选项时使用。此变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CLEAN: 指定生成的文件列表(例如,由moc和uic生成)和由make clean删除的目标文件。
QMAKE_CXX: 指定在构建包含c++源代码的项目时将使用的c++编译器。只要编译器可执行文件在处理Makefile时位于path变量中包含的路径上,就只需要指定该编译器可执行文件的文件名。
QMAKE_CXXFLAGS: 指定用于构建项目的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。可以通过分别修改QMAKE_CXXFLAGS_DEBUG和QMAKE_CXXFLAGS_RELEASE变量来调整特定于调试和发布模式的标志。
QMAKE_CXXFLAGS_DEBUG: 指定用于调试构建的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CXXFLAGS_RELEASE: 指定用于发布构建的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CXXFLAGS_SHLIB: 指定用于创建共享库的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CXXFLAGS_THREAD: 指定用于创建多线程应用程序的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CXXFLAGS_WARN_OFF: 指定用于抑制编译器警告的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_CXXFLAGS_WARN_ON: 指定用于生成编译器警告的c++编译器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_DEVELOPMENT_TEAM: 注意:此变量仅用于macOS、iOS、tvOS和watchOS。
用于签名证书和配置文件的开发团队的标识符。
QMAKE_DISTCLEAN: 指定要通过make distclean删除的文件列表。
QMAKE_EXTENSION_SHLIB: 包含共享库的扩展名。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
注意:更改扩展名的特定于平台的变量覆盖该变量的内容。
QMAKE_EXTENSION_STATICLIB: 包含共享静态库的扩展名。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_EXT_MOC: 包含用于包含的moc文件的扩展名。
参见文件扩展名。
QMAKE_EXT_UI: 包含用于Qt设计器UI文件的扩展名。
参见文件扩展名。
QMAKE_EXT_PRL: 包含用于创建的PRL文件的扩展名。
参见文件扩展名、库依赖项。
QMAKE_EXT_LEX: 包含对给定给Lex的文件使用的扩展名。
请参阅“文件扩展名”和“词汇源”。
QMAKE_EXT_YACC: 包含用于给定给Yacc的文件的扩展名。
参见文件扩展名YACCSOURCES。
QMAKE_EXT_OBJ: 包含用于生成目标文件的扩展名。
参见文件扩展名。
QMAKE_EXT_CPP: 包含应解释为c++源代码的文件的后缀。
参见文件扩展名。
QMAKE_EXT_H: 包含文件的后缀,这些后缀应解释为C头文件。
参见文件扩展名。
QMAKE_EXTRA_COMPILERS: 指定附加编译器或预处理器的列表。
参见添加编译器。
QMAKE_EXTRA_TARGETS: 指定附加qmake目标的列表。
请参见添加自定义目标。
QMAKE_FAILED_REQUIREMENTS: 包含失败需求的列表。该变量的值由qmake设置,不能修改。
参见also require()和require。
QMAKE_FRAMEWORK_BUNDLE_NAME: 注意:此变量仅用于macOS、iOS、tvOS和watchOS。
在框架项目中,此变量包含要用于构建框架的名称。
默认情况下,此变量包含与目标变量相同的值。
有关创建框架和库包的更多信息,请参见创建框架。
QMAKE_FRAMEWORK_VERSION: 注意:此变量仅用于macOS、iOS、tvOS和watchOS。
对于构建目标为macOS、iOS、tvOS或watchOS框架的项目,此变量用于指定将应用于所构建框架的版本号。
默认情况下,此变量包含与版本变量相同的值。
有关创建框架的更多信息,请参见创建框架。
QMAKE_HOST: 提供有关运行qmake的主机的信息。例如,您可以从QMAKE_HOST.arch检索主机架构。
QMAKE_INCDIR: 指定附加到INCLUDEPATH的系统头路径列表。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_INCDIR_EGL: 指定使用OpenGL/ES或OpenVG支持构建目标时要添加到INCLUDEPATH的EGL头文件的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_INCDIR_OPENGL: 指定在使用OpenGL支持构建目标时要添加到INCLUDEPATH的OpenGL头文件的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenGL实现使用EGL(大多数OpenGL/ES系统),那么可能还需要设置QMAKE_INCDIR_EGL。
QMAKE_INCDIR_OPENGL_ES2: 此变量指定在构建支持OpenGL ES 2的目标时要添加到INCLUDEPATH的OpenGL头文件的位置。
这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenGL实现使用EGL(大多数OpenGL/ES系统),那么可能还需要设置QMAKE_INCDIR_EGL。
QMAKE_INCDIR_OPENVG: 指定在使用OpenVG支持构建目标时要添加到INCLUDEPATH的OpenVG头文件的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenVG实现使用EGL,那么可能还需要设置QMAKE_INCDIR_EGL。
QMAKE_INCDIR_X11: 注意:此变量仅用于Unix平台。
指定在构建X11目标时要添加到INCLUDEPATH的X11头文件路径的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_INFO_PLIST: 注意:此变量仅用于macOS、iOS、tvOS和watchOS平台。
指定要包含在macOS、iOS、tvOS和watchOS应用程序包中的属性列表文件的名称。plist。
在.plist文件中,您可以定义一些变量,例如@EXECUTABLE@, qmake将用实际的可执行名称替换这些变量。其他变量包括@ICON@、@TYPEINFO@、@LIBRARY@和@SHORT_VERSION@。
如果为iOS构建,并且.plist文件包含关键的NSPhotoLibraryUsageDescription,那么qmake将在构建中包含一个附加插件,用于添加照片访问支持(例如,QFile/QFileDialog)。看到信息。有关此密钥的更多信息,请参阅苹果公司的plist文档。
注意:大多数时候,默认信息。plist足够好了。
QMAKE_IOS_DEPLOYMENT_TARGET: 注意:这个变量只在iOS平台上使用。
指定应用程序支持的iOS的硬最小版本。
有关更多信息,请参见表示支持的iOS版本。
QMAKE_LFLAGES: 指定传递给链接器的一般标志集。如果需要更改用于特定平台或项目类型的标志,请为此目的使用一个专门的变量,而不是这个变量。
QMAKE_LFLAGS_CONSOLE: 注意:此变量仅用于Windows。
指定用于构建控制台程序的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_DEBUG: 指定调试构建的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_PLUGIN: 指定用于构建插件的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_RPATH: 注意:此变量仅用于Unix平台。
指定使用QMAKE_RPATHDIR值所需的链接器标志。
这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_REL_RPATH: 指定在QMAKE_RPATHDIR中启用相对路径所需的链接器标志。
这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_REL_RPATH_BASE: 指定动态链接器理解为引用可执行文件或库的位置的字符串。
这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_RPATHLINK: 指定使用QMAKE_RPATHLINKDIR值所需的链接器标志。
这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_RELEASE
指定发布构建的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_APP
指定用于构建应用程序的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_SHLIB
指定用于构建共享库的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_SONAME
指定用于设置共享对象名称的链接器标志,如.so或.dll。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_THREAD
指定用于构建多线程项目的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LFLAGS_WINDOWS
注意:此变量仅用于Windows。
指定用于构建Windows GUI项目(即非控制台应用程序)的链接器标志。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBDIR
指定系统库路径列表。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBDIR_FLAGS
注意:此变量仅用于Unix平台。
指定前缀为-L的所有库目录的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBDIR_EGL
指定当EGL与OpenGL/ES或OpenVG一起使用时,EGL库目录的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBDIR_OPENGL
指定OpenGL库目录的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenGL实现使用EGL(大多数OpenGL/ES系统),那么可能还需要设置QMAKE_LIBDIR_EGL。
QMAKE_LIBDIR_OPENVG
指定OpenVG库目录的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenVG实现使用EGL,那么可能还需要设置QMAKE_LIBDIR_EGL。
QMAKE_LIBDIR_X11
注意:此变量仅用于Unix平台。
指定X11库目录的位置。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBS
指定所有项目库。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBS_EGL
在使用OpenGL/ES或OpenVG构建Qt时指定所有EGL库。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。通常的值是-lEGL。
QMAKE_LIBS_OPENGL
指定所有OpenGL库。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenGL实现使用EGL(大多数OpenGL/ES系统),那么可能还需要设置QMAKE_LIBS_EGL。
QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES2
这些变量指定了OpenGL es1和OpenGL es2的所有OpenGL库。
这些变量的值通常由qmake或qmake.conf处理,很少需要修改。
如果OpenGL实现使用EGL(大多数OpenGL/ES系统),那么可能还需要设置QMAKE_LIBS_EGL。
QMAKE_LIBS_OPENVG
指定所有OpenVG库。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。通常的值是-lOpenVG。
一些OpenVG引擎是在OpenGL之上实现的。这将在配置时检测到,并且QMAKE_LIBS_OPENGL将隐式地添加到QMAKE_LIBS_OPENVG中,只要链接了OpenVG库。
如果OpenVG实现使用EGL,那么可能还需要设置QMAKE_LIBS_EGL。
QMAKE_LIBS_THREAD
注意:此变量仅用于Unix平台。
指定在构建多线程目标时需要链接的所有库。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIBS_X11
注意:此变量仅用于Unix平台。
指定所有X11库。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LIB_FLAG
如果指定了库模板,则此变量不是空的。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LINK
指定在构建基于应用程序的项目时将使用的链接器。在处理Makefile时,只要链接器可执行文件位于path变量中包含的路径上,就只需要指定它的文件名。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LINK_SHLIB_CMD
指定创建共享库时要执行的命令。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_LN_SHLIB
指定在创建到共享库的链接时要执行的命令。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_OBJECTIVE_CFLAGS
指定用于构建项目的Objective C/ c++编译器标志。除了QMAKE_CFLAGS和QMAKE_CXXFLAGS外,还将使用这些标志。
QMAKE_POST_LINK
指定将目标链接在一起后要执行的命令。该变量通常为空,因此不执行任何操作。
注意:这个变量对Xcode项目没有影响。
QMAKE_PRE_LINK
指定在将目标链接到一起之前要执行的命令。该变量通常为空,因此不执行任何操作。
注意:这个变量对Xcode项目没有影响。
QMAKE_PROJECT_NAME
注意:此变量仅用于Visual Studio项目文件。
在为ide生成项目文件时确定项目名称。默认值是目标名称。这个变量的值通常由qmake处理,很少需要修改。
QMAKE_PROVISIONING_PROFILE
注意:此变量仅用于macOS、iOS、tvOS和watchOS。
有效配置配置文件的UUID。与QMAKE_DEVELOPMENT_TEAM一起使用,指定配置配置文件。
注意:指定供应配置文件将禁用自动托管签名。
QMAKE_MAC_SDK
在构建通用二进制文件时,此变量用于macOS。
QMAKE_MACOSX_DEPLOYMENT_TARGET
注意:此变量仅在macOS平台上使用。
指定应用程序支持的macOS的硬最小版本。
有关更多信息,请参见macOS版本依赖项。
QMAKE_MAKEFILE
指定要创建的Makefile的名称。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_QMAKE
包含qmake可执行文件的abosolute路径。
注意:不要试图覆盖此变量的值。
QMAKE_RESOURCE_FLAGS
此变量用于自定义在使用它的每个构建规则中传递给资源编译器的选项列表。例如,下面的行确保每次调用rcc时,-threshold和-compress选项都与特定的值一起使用:
QMAKE_RESOURCE_FLAGS += -threshold 0 -compress 9
QMAKE_RPATHDIR
注意:此变量仅用于Unix平台。
指定在链接时添加到可执行文件的库路径列表,以便在运行时优先搜索这些路径。
当指定了相对路径时,qmake将把它们错误地转换成动态链接器能够理解的与引用的可执行文件或库位置相关的形式。这只被一些平台支持(当前的Linux和基于达尔文的平台),并且可以通过检查QMAKE_REL_RPATH_BASE是否设置来检测。
QMAKE_RPATHLINKDIR
指定静态链接器的库路径列表,以搜索共享库的隐式依赖项。有关更多信息,请参见ld(1)的手册页。
QMAKE_RUN_CC
指定构建对象所需的单个规则。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_RUN_CC_IMP
指定构建对象所需的单个规则。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_RUN_CXX
指定构建对象所需的单个规则。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_RUN_CXX_IMP
指定构建对象所需的单个规则。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_SONAME_PREFIX
如果定义了该变量,则将该变量的值用作一个路径,该路径将前缀到已构建的共享库的SONAME标识符。SONAME是动态链接器稍后用来引用库的标识符。通常,该引用可以是库名或完整的库路径。
QMAKE_TARGET
指定项目目标的名称。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
QMAKE_TARGET_COMPANY
仅Windows。为项目目标指定公司;这适用于将公司名称放入应用程序的属性中。只有在设置了VERSION或RC_ICONS变量,而没有设置RC_FILE和RES_FILE变量时,才会使用这种方法。
QMAKE_TARGET_DESCRIPTION
仅Windows。指定项目目标的描述;这适用于将描述放入应用程序的属性中。只有在设置了VERSION或RC_ICONS变量,而没有设置RC_FILE和RES_FILE变量时,才会使用这种方法。
QMAKE_TARGET_COPYRIGHT
仅Windows。指定项目目标的版权信息;这适用于将版权信息放入应用程序的属性中。只有在设置了VERSION或RC_ICONS变量,而没有设置RC_FILE和RES_FILE变量时,才会使用这种方法。
QMAKE_TARGET_PRODUCT
仅Windows。指定项目目标的产品;这适用于将产品放入应用程序的属性中。只有在设置了VERSION或RC_ICONS变量,而没有设置RC_FILE和RES_FILE变量时,才会使用这种方法。
QMAKE_TVOS_DEPLOYMENT_TARGET
注意:此变量仅用于tvOS平台。
指定应用程序支持的tvOS的硬最小版本。
有关更多信息,请参见表示支持的iOS版本。
QMAKE_WATCHOS_DEPLOYMENT_TARGET
注意:此变量仅用于watchOS平台。
指定应用程序支持的watchOS的硬最小版本。
有关更多信息,请参见表示支持的iOS版本。
QT
指定项目使用的Qt模块。要为每个模块添加值,请参阅模块文档。
QTPLUGIN
指定要与应用程序链接的静态Qt插件的名称列表,以便它们可以作为内置资源使用。
QT_VERSION
包含Qt的当前版本。
QT_MAJOR_VERSION
包含Qt的当前主要版本。
QT_MINOR_VERSION
包含Qt的当前次要版本。
QT_PATCH_VERSION
包含Qt的当前补丁版本。
RC_FILE
指定应用程序的资源文件的名称。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
RC_CODEPAGE
仅Windows。指定应在生成的.rc文件中指定的代码页。只有在设置了VERSION或RC_ICONS变量,而没有设置RC_FILE和RES_FILE变量时,才会使用这种方法。
RC_DEFINES
仅Windows。qmake将此变量的值添加为RC预处理器宏(/d选项)。如果没有设置此变量,则使用define变量。
RC_DEFINES + = USE_MY_STUFF
RC_ICONS
仅Windows。指定应该包含在生成的.rc文件中的图标。这仅在未设置RC_FILE和RES_FILE变量时才会使用。
RC_LANG
仅Windows。指定应在生成的.rc文件中指定的语言。只有在设置了VERSION或RC_ICONS变量,而没有设置RC_FILE和RES_FILE变量时,才会使用这种方法。
RC_INCLUDEPATH
指定传递给Windows资源编译器的包含路径。
RCC_DIR
指定Qt资源编译器输出文件的目录。
REQUIRES
指定作为条件计算的值列表。如果其中任何条件为假,qmake在构建时将跳过此项目(及其子目录)。
注意:如果您想在构建时跳过项目或子项目,我们建议使用require()函数。
资源
指定目标的资源集合文件(qrc)的名称。有关资源收集文件的更多信息,请参见Qt资源系统。
RES_FILE
指定目标的已编译Windows资源文件的名称。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
SOURCES: 指定项目中所有源文件的名称。
SUBDIRS: 当与subdirs模板一起使用时,此变量指定包含需要构建的项目部分的所有子目录或项目文件的名称。使用此变量指定的每个子目录必须包含自己的项目文件。
TARGET: 指定目标文件的名称。默认情况下包含项目文件的基本名称。
TARGET_EXT
指定目标的扩展名。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
TARGET_x
使用主版本号指定目标的扩展名。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
TARGET_x.y.z
用版本号指定目标的扩展名。这个变量的值通常由qmake或qmake.conf处理,很少需要修改。
TEMPLATE
指定生成项目时使用的模板的名称。允许的值为:
选项 | 描述 |
app | 创建用于构建应用程序的Makefile(默认值)。有关更多信息,请参见构建应用程序。 |
lib | 创建用于构建库的Makefile。有关更多信息,请参见构建一个库。 |
subdirs | 创建用于在子目录中构建目标的Makefile。子目录是使用SUBDIRS变量指定的。 |
aux | 为不构建任何东西创建一个Makefile。如果不需要调用编译器来创建目标,例如,因为您的项目是用解释语言编写的,那么可以使用这种方法。 注意:此模板类型仅适用于基于makefile的生成器。特别是,它不能与vcxproj和Xcode生成器一起工作。 |
vcapp | 仅Windows。为Visual Studio创建应用程序项目。有关更多信息,请参见创建Visual Studio项目文件。 |
vclib | 仅Windows。为Visual Studio创建一个库项目。 |
TRANSLATIONS: 指定包含将用户界面文本翻译成非本机语言的翻译(.ts)文件列表。
有关Qt国际化(i18n)和本地化(l10n)的更多信息,请参阅Qt语言学家手册。
UI_DIR: 指定uic中的所有中间文件应该放置的目录。
VERSION: 如果指定应用程序模板,则指定应用程序的版本号;如果指定库模板,则指定库的版本号。
在Windows上,如果未设置RC_FILE和RES_FILE变量,则触发自动生成.rc文件。每个数字必须在0到65535之间。有关.rc文件生成的更多细节可以在平台说明中找到。
VERSION_PE_HEADER: 仅Windows。指定版本号,Windows链接器通过/ version选项将该版本号放入.exe或.dll文件的头文件中。只能指定主要和次要版本。如果没有设置VERSION_PE_HEADER,它将从版本返回到主版本和次版本(如果设置了)。
VER_MAJ: 如果指定了库模板,则指定库的主版本号。
VER_MIN: 如果指定了库模板,则指定库的次要版本号。
VER_PAT: 如果指定了库模板,则指定库的补丁版本号。
VPATH: 告诉qmake在哪里搜索它无法打开的文件。例如,如果qmake查找源代码并找到一个它无法打开的条目,那么它将遍历整个VPATH列表,以查看是否能够单独找到该文件。
参见DEPENDPATH。
WINRT_MANIFEST: 指定要在Windows运行时传递给应用程序清单的参数。
YACCSOURCES: 指定要包含在项目中的Yacc源文件列表。所有依赖项、头文件和源文件都将自动包含在项目中。
_PRO_FILE_:
- 包含到正在使用的项目文件的路径。
_RPO_FILE_PWD_
包含指向包含正在使用的项目文件的目录的路径。
例如,下面的行导致将包含项目文件的目录的位置写入控制台:
message($ $ _PRO_FILE_PWD_)
注意:不要试图覆盖此变量的值。
Whitespace(空格)
通常,空格分隔变量赋值。若要指定包含空格的值,必须将值括在双引号内:
DEST = "Program Files"
Comments(注释)
您可以向项目文件添加注释。注释以#字符开始,并继续到同一行的末尾。例如:
# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.
要在变量赋值中包含#字符,需要使用内置的LITERAL_HASH变量的内容。
- Built-in Functions and Control Flow(内置功能和控制流程
)
qmake提供了许多内置函数来支持要处理的变量的内容。简单项目文件中最常用的函数是include()函数,它以文件名作为参数。给定文件的内容包含在使用include函数的地方的项目文件中。include函数最常用来包含其他项目文件:
include(other.pro)
对条件结构的支持通过作用域提供,作用域的行为类似于编程语言中的if语句:
win32 {
SOURCES += paintwidget_win.cpp
}
只有在条件为真时,方括号内的赋值才会执行。在这种情况下,必须设置win32配置选项。这在Windows上自动发生。开支撑必须与条件站在同一条线上。
通常需要循环的变量的更复杂操作由内置函数提供,如find()、unique()和count()。这些函数以及其他许多函数用于操作字符串和路径、支持用户输入和调用外部工具。有关使用这些函数的更多信息,请参见qmake语言。有关所有函数及其描述的列表,请参见替换函数和测试函数。
Project Templates(工程模板)
TEMPLATE变量用于定义将要构建的项目的类型。如果在项目文件中没有声明这一点,qmake假设应该构建一个应用程序,并为此生成一个适当的Makefile(或等效文件)。
下表总结了可用的项目类型,并描述了qmake将为每个项目生成的文件:
Template | qmake output |
app(default) |
|
lib |
|
aux | make efile不构建任何东西。如果不需要调用编译器来创建目标,例如,因为您的项目是用解释语言编写的,那么可以使用这种方法。 注意:此模板类型仅适用于基于makefile的生成器。特别是,它不能与vcxproj和Xcode生成器一起工作。 |
subdirs | 包含使用SUBDIRS变量指定的子目录规则的Makefile。每个子目录必须包含自己的项目文件。 |
vcapp | 用于构建应用程序的Visual Studio项目文件。 |
vclib | Visual Studio项目文件来构建一个库。 |
vcsubdirs | 在子目录中构建项目的Visual Studio解决方案文件。 |
有关为使用app和lib模板的项目编写项目文件的建议,请参阅构建公共项目类型。
当使用subdirs模板时,qmake生成一个Makefile来检查每个指定的子目录,处理它在其中找到的任何项目文件,并在新创建的Makefile上运行平台的make工具。SUBDIRS变量用于包含要处理的所有子目录的列表。
General Configuration(常规配置)
配置变量指定项目应该配置的选项和特性。
项目可以在发布模式或调试模式下构建,或者两者都可以。如果同时指定了debug和release,则最后一个将生效。如果您指定debug_and_release选项来构建项目的调试版本和发布版本,那么qmake生成的Makefile包含一个规则,用于构建两个版本。这可以通过以下方式调用:
make all
将build_all选项添加到配置变量使此规则成为构建项目时的默认规则。
注意:配置变量中指定的每个选项也可以用作范围条件。可以使用内置的CONFIG()函数测试某些配置选项是否存在。例如,下面几行代码将函数显示为作用域中的条件,以测试是否只使用opengl选项:
CONFIG(opengl) {
message(Building with OpenGL support.)
} else {
message(OpenGL support is not available.)
}
这允许为发布和调试构建定义不同的配置。有关更多信息,请参见使用范围。
以下选项定义要构建的项目的类型。
注意:其中一些选项只有在相关平台上使用时才生效。
注意:您必须使用“+=”,而不是“=”,否则qmake将无法使用Qt的配置来确定项目所需的设置。
Declaring Qt Libraries(声明QT库)
如果配置变量包含qt值,则启用qmake对qt应用程序的支持。这样就可以对应用程序使用的Qt模块进行微调。这是通过QT变量实现的,QT变量可用于声明所需的扩展模块。例如,我们可以通过以下方式启用XML和网络模块:
QT += network xml
注意:QT默认包含core模块和gui模块,因此上面的声明将网络和XML模块添加到这个默认列表中。下面的赋值省略了默认模块,在编译应用程序(即带界面的程序)的源代码时会导致错误:
QT -= gui # Only the core module is used.
Configuration Features(配置功能)
qmake可以通过在feature (.prf)文件中指定的额外配置特性来设置。这些额外的特性通常为构建过程中使用的自定义工具提供支持。要向构建过程添加特性,请将特性名称(特性文件名的词干)附加到配置变量。
例如,qmake可以配置构建过程,利用pkg-config支持的外部库,如D-Bus和ogg库,其代码行如下:
CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1
有关添加特性的更多信息,请参见添加新配置特性。
Declaring Other Libraries(声明其他库)
如果您在项目中使用Qt提供的库之外的其他库,则需要在项目文件中指定它们。
qmake搜索库和要链接的特定库的路径可以添加到LIBS变量中的值列表中。您可以指定库的路径,或者使用unix风格的符号指定库和路径。
例如,下面几行显示了如何指定库:
LIBS += -L/usr/local/lib -lmath
包含头文件的路径也可以使用INCLUDEPATH变量以类似的方式指定。
例如,要添加几个路径来搜索头文件:
INCLUDEPATH = c:/msdev/include d:/stl/include
二Building Common Project Types(构建公共项目类型)
本章描述如何为基于Qt的三种常见项目类型(应用程序、库和插件)设置qmake项目文件。尽管所有项目类型都使用许多相同的变量,但是它们都使用特定于项目的变量来定制输出文件。
这里没有描述特定于平台的变量。有关更多信息,请参见Qt For Windows - Deployment和Qt For macOS。
Building an Application(构建应用程序)
应用程序模板告诉qmake生成一个Makefile来构建应用程序。使用此模板,可以通过向配置变量定义添加以下选项之一来指定应用程序的类型:
选项 | 描述 |
windows | 该应用程序是一个Windows GUI应用程序。 |
console | 仅应用程序模板:应用程序是一个Windows控制台应用程序。 |
testcase | 应用程序是一个自动化测试。 |
使用此模板时,可以识别以下qmake系统变量。您应该在.pro文件中使用这些文件来指定有关应用程序的信息。对于其他与平台相关的系统变量,您可以查看一下Platform Notes。
您只需要使用具有值的系统变量。例如,如果没有任何额外的包含程序,则不需要指定任何包含程序。qmake将添加必要的默认值。一个示例项目文件可能是这样的:
TEMPLATE = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += USE_MY_STUFF
CONFIG += release
对于单值的项,例如模板或目标目录,我们使用“=”;但是对于多值项,我们使用“+=”添加到该类型的现有项。使用“=”将变量值替换为新值。例如,如果我们编写define =USE_MY_STUFF,所有其他定义都会被删除。
Building a Testcase
testcase项目是一个应用程序项目,打算作为自动化测试运行。通过向配置变量添加值testcase,任何应用程序都可以被标记为testcase。
对于testcase项目,qmake将在生成的Makefile中插入一个检查目标。此目标将运行应用程序。如果测试终止时退出码为零,则认为测试通过。
check目标通过SUBDIRS项目自动递归。这意味着可以在SUBDIRS项目中发出make check命令来运行整个测试套件。
检查目标的执行可以由某些Makefile变量定制。这些变量是:
Variable | Description |
TESTRUNNER | 前缀在每个测试命令之前的命令或shell片段。一个用例示例是一个“超时”脚本,如果测试没有在指定的时间内完成,它将终止测试。 |
TESTARGS | 附加到每个测试命令的附加参数。例如,传递额外的参数来设置测试的输出文件和格式可能很有用(例如-o文件名,QTestLib支持的格式选项)。 |
注意:必须在调用make工具时设置变量,而不是在.pro文件中。大多数make工具支持直接在命令行上设置Makefile变量:
Building a Library
lib模板告诉qmake生成一个Makefile,它将构建一个库。使用此模板时,除了应用程序模板支持的系统变量外,还支持版本变量。使用.pro文件中的变量指定库的信息。
当使用lib模板时,可以在配置变量中添加以下选项来确定要构建的库的类型:
Option | Description |
dll | 库是一个共享库(dll)。 |
staticlib | 库是一个静态库。 |
plugin | 库是一个插件。 |
还可以定义以下选项来提供关于库的附加信息。
版本——目标库的版本号。例如,2.3.1。
库的目标文件名依赖于平台。例如,在X11、macOS和iOS上,库名将由lib前缀。在Windows上,文件名不添加前缀。
Building a Plugin(构建一个插件)
插件是使用lib模板构建的,如上一节所述。这告诉qmake为项目生成一个Makefile,它将以适合每个平台的形式(通常是库的形式)构建插件。与普通库一样,VERSION变量用于指定关于插件的信息。
版本——目标库的版本号。例如,2.3.1。
Building a Qt Designer Plugin(构建Qt设计器插件)
Qt Designer插件是使用一组特定的配置设置构建的,这些配置设置依赖于Qt为您的系统配置的方式。为了方便起见,可以通过向QT变量添加designer来启用这些设置。例如:
QT += widgets designer
有关基于插件的项目的更多示例,请参见Qt设计器示例。
Building and Installing in Debug and Release Modes(以调试和发布模式构建和安装)
有时候,在调试和发布模式下都需要构建一个项目。虽然配置变量可以同时包含debug和release选项,但是只应用最后指定的选项。
Building in Both Modes
要使项目能够在两种模式下构建,您必须向配置变量添加debug_and_release选项:
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = debug_binary
} else {
TARGET = release_binary
}
上面代码片段中的作用域在每种模式下修改构建目标,以确保生成的目标具有不同的名称。为目标提供不同的名称可以确保其中一个不会覆盖另一个。
当qmake处理项目文件时,它将生成一个Makefile规则,允许以两种模式构建项目。这可以通过以下方式调用:
make all
build_all选项可以添加到项目文件中的配置变量中,以确保默认情况下项目是在两种模式下构建的:
CONFIG += build_all
这允许使用默认规则处理Makefile:
make
Installing in Both Modes(以两种模式安装)
build_all选项还确保在调用安装规则时安装目标的两个版本:
make install
可以根据目标平台定制构建目标的名称。例如,一个库或插件可以使用与Unix平台不同的Windows约定来命名:
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)
}
上面代码片段中的默认行为是在调试模式下构建时修改用于构建目标的名称。可以将else子句添加到范围中,以对发布模式执行相同的操作。如果保持原样,目标名称将保持不变。
三Running qmake
qmake的行为可以通过在命令行上指定各种选项来定制。这些允许对构建过程进行微调,提供有用的诊断信息,并可用于指定项目的目标平台。
命令语法
用于运行qmake的语法采用以下简单形式:
qmake [mode] [options]文件
操作模式
qmake支持两种不同的操作模式。在默认模式下,qmake使用项目文件中的信息生成Makefile,但也可以使用qmake生成项目文件。如果要显式设置模式,必须在所有其他选项之前指定它。模式可以是以下两个值之一:
-makefile
qmake输出将是一个Makefile。
-project
qmake输出将是一个项目文件。
注意:创建的文件可能需要编辑。例如,添加QT变量以适应项目所需的模块。
您可以使用这些选项来指定常规设置和特定于模式的设置。只应用于Makefile模式的选项在Makefile模式选项小节中进行描述,而影响项目文件创建的选项在项目模式选项小节中进行描述。
文件
files参数表示由空格分隔的一个或多个项目文件的列表。
通用选项
可以在qmake的命令行上指定多种选项,以便自定义构建过程,并覆盖平台的默认设置。以下基本选项提供了使用qmake的帮助,指定qmake在何处写入输出文件,并控制将写入控制台的调试信息的级别:
-help
qmake将介绍这些特性并提供一些有用的帮助。
- o文件
qmake输出将定向到文件。如果没有指定此选项,qmake将尝试为其输出使用合适的文件名,这取决于它运行的模式。
如果指定了“-”,输出将定向到stdout。
- d
qmake将输出调试信息。多次添加-d会增加冗长。
用于项目的模板通常由项目文件中的模板变量指定。你可以使用以下选项覆盖或修改:
- t tmpl
qmake将使用tmpl覆盖任何设置的模板变量,但仅在.pro文件被处理之后。
-tp prefix
qmake将为模板变量添加前缀。
警告信息的级别可以微调,以帮助您在项目文件中发现问题:
- wall
qmake将报告所有已知的警告。
-Wnone
qmake不会生成任何警告信息。
-Wparser
qmake只会生成解析器警告。这将提醒您注意项目文件解析过程中的常见陷阱和潜在问题。
-Wlogic
qmake将对项目文件中的常见陷阱和潜在问题发出警告。例如,qmake将报告列表中出现的多个文件和丢失的文件。
Makefile Mode Options
qmake -makefile [options] files
在Makefile模式下,qmake将生成一个用于构建项目的Makefile。此外,在此模式下可以使用以下选项来影响生成项目文件的方式:
-after
qmake将在指定文件之后处理命令行上给出的赋值。
-nocache
qmake将忽略.qmake。缓存文件。
-nodepend
qmake不会生成任何依赖项信息。
-cache file
qmake将使用file作为缓存文件,忽略任何其他.qmake。缓存文件。
-spec spec
qmake将使用spec作为平台和编译器信息的路径,忽略QMAKESPEC的值。
您还可以在命令行上传递qmake赋值。它们在所有指定的文件之前被处理。例如,下面的命令从test.pro生成一个Makefile:
qmake -makefile -o Makefile "CONFIG+=test" test.pro
但是,某些指定的选项可以省略,因为它们是默认值:
qmake "CONFIG+=test" test.pro
如果确定希望在指定文件之后处理变量,则可以传递-after选项。当指定此选项时,命令行中-after选项之后的所有赋值都将延迟到解析指定的文件之后。
Project Mode Options
qmake -project [options] files
在项目模式下,qmake将生成一个项目文件。此外,您可以在此模式下提供以下选项:
- r
qmake将递归地遍历提供的目录。
-nopwd
qmake不会在当前工作目录中查找源代码。它将只使用指定的文件。
在此模式下,files参数可以是文件或目录的列表。如果指定了一个目录,它将包含在DEPENDPATH变量中,并且生成的项目文件中将包含来自该目录的相关代码。如果给定一个文件,它将被附加到正确的变量,这取决于它的扩展名。例如,UI文件被添加到表单中,c++文件被添加到源文件中。
您还可以在此模式下在命令行上传递赋值。这样做时,这些分配将放在生成的项目文件的最后。
Platform Notes
许多跨平台项目都可以通过基本的qmake配置特性来处理。然而,在某些平台上,有时利用特定于平台的特性是有用的,甚至是必要的。qmake了解其中的许多特性,可以通过特定的变量访问这些特性,这些变量只在相关平台上生效。
macOS、iOS、tvOS和watchOS
这些平台特有的特性包括支持创建通用二进制文件、框架和包。
资源和二进制包
源包中提供的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
创建和移动Xcode项目
macOS上的开发人员可以利用qmake对Xcode项目文件的支持,如Qt for macOS文档中所述。通过运行qmake从现有的qmake项目文件生成Xcode项目。例如:
qmake -spec macx-xcode project.pro
注意:如果稍后将项目移动到磁盘上,则必须再次运行qmake来处理项目文件并创建一个新的Xcode项目文件。
同时支持两个构建目标
实现这一点目前是不可行的,因为活动构建配置的Xcode概念在概念上与构建目标的qmake概念不同。
Xcode活动构建配置设置用于修改Xcode配置、编译器标志和类似的构建选项。与Visual Studio不同,Xcode不允许根据选择的是调试配置还是发布构建配置来选择特定的库文件。qmake debug和release设置控制哪些库文件链接到可执行文件。
目前无法从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资源管理器中,文件属性的version选项卡由资源元素填充。此外,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来生成更新的Visual Studio项目。
注意:如果您正在使用Visual Studio外接程序,请选择Qt > Import from .pro file to Import .pro files。
Visual Studio清单文件
在部署使用Visual Studio 2005或更高版本构建的Qt应用程序时,请确保正确处理了在链接应用程序时创建的清单文件。这是为生成dll的项目自动处理的。
删除应用程序可执行文件的清单嵌入可以通过以下配置变量的分配来完成:
CONFIG -= embed_manifest_exe
此外,可以通过以下配置变量的赋值来删除dll的嵌入清单:
CONFIG -= embed_manifest_dll
这在Windows部署指南中有更详细的讨论。