FindQt4¶
查找 Qt4,一个用于创建图形用户界面和应用程序的跨平台应用程序开发框架。
find_package(Qt4 [<version>] [...])
此模块定义了许多导入目标、宏和变量,以便在项目中utables.
注意
此模块适用于 Qt 版本 4。对于 Qt 版本 5 及更高版本,Qt 上游也提供了用于查找 Qt 的导出配置。新代码应遵循 cmake-qt(7),而不是使用此模块。
要检测 Qt4 包,需要 Qt4 的 qmake 工具,并且该工具必须在系统路径中可用。
注意
在使用 导入目标 时,在 Windows 上会自动链接 qtmain.lib 静态库以用于 WIN32 可执行文件。要全局禁用此行为,请在查找 Qt4 之前设置 QT4_NO_LINK_QTMAIN 变量。要为特定可执行文件禁用此行为,请在该可执行文件上将 QT4_NO_LINK_QTMAIN 目标属性设置为 TRUE。
Qt 构建工具¶
Qt 依赖于一些捆绑工具进行代码生成,例如用于元对象代码生成的 moc,用于小部件布局和填充的 uic,以及用于生成虚拟文件系统内容的 rcc。如果满足适当的条件,cmake(1) 可能会自动调用这些工具。有关更多信息,请参阅 cmake-qt(7)。
导入的目标¶
可以使用相应的 导入目标 和 target_link_libraries() 命令来链接 Qt 库。
target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)
链接到导入目标会自动应用正确的包含目录和编译定义,以用于构建 myexe。
导入目标还管理其依赖项,因此如果另一个 Qt 库依赖于 Qt4::QtCore,则无需显式列出它。类似地,在链接 Qt4::QtDeclarative 时会自动包含 Qt4::QtGui。可以使用 if(TARGET) 命令检查目标是否存在。
如果同时存在 Qt 工具包库的调试版本和发布版本,CMake 会根据 构建配置 选择合适的版本。
如果找到,此模块将提供以下导入目标:
Qt4::QtCoreQtCore 目标
Qt4::QtGuiQtGui 目标
Qt4::Qt3SupportQt3Support 目标
Qt4::QtAssistantQtAssistant 目标
Qt4::QtAssistantClientQtAssistantClient 目标
Qt4::QAxContainerQAxContainer 目标(仅限 Windows)
Qt4::QAxServerQAxServer 目标(仅限 Windows)
Qt4::QtDBusQtDBus 目标
Qt4::QtDeclarativeQtDeclarative 目标
Qt4::QtDesignerQtDesigner 目标
Qt4::QtDesignerComponentsQtDesignerComponents 目标
Qt4::QtHelpQtHelp 目标
Qt4::QtMotifQtMotif 目标
Qt4::QtMultimediaQtMultimedia 目标
Qt4::QtNetworkQtNetwork 目标
Qt4::QtNsPluginQtNsPlugin 目标
Qt4::QtOpenGLQtOpenGL 目标
Qt4::QtScriptQtScript 目标
Qt4::QtScriptToolsQtScriptTools 目标
Qt4::QtSqlQtSql 目标
Qt4::QtSvgQtSvg 目标
Qt4::QtTestQtTest 目标
Qt4::QtUiToolsQtUiTools 目标
Qt4::QtWebKitQtWebKit 目标
Qt4::QtXmlQtXml 目标
Qt4::QtXmlPatternsQtXmlPatterns 目标
Qt4::phononphonon 目标
结果变量¶
此模块定义了以下变量
Qt4_FOUND一个布尔值,指示是否找到了(所请求版本的)Qt4。
QT_FOUND与
Qt4_FOUND相同。一个布尔值,指示是否找到了(所请求版本的)Qt4。此变量是为了与其他 Qt 查找模块兼容而提供的。QT_VERSION_MAJOR找到的 Qt 的主版本号。
QT_VERSION_MINOR找到的 Qt 的次版本号。
QT_VERSION_PATCH找到的 Qt 的补丁版本号。
提示¶
QT4_NO_LINK_QTMAIN如果在查找 Qt4 之前将其设置为布尔 true,则会全局禁用在 Windows 上链接
qtmain.lib静态库。
宏¶
在某些情况下,以更手动的方式调用 Qt 构建工具可能是必要或有用的。此模块提供了以下宏来为这些用途添加目标:
- qt4_wrap_cpp¶
创建用于对给定输入文件列表运行
moc的构建规则。qt4_wrap_cpp(<variable> <files>... [TARGET <target>] [OPTIONS <options>...])
此宏为处理包含带有
Q_OBJECT声明的 Qt 类的输入文件列表<files>创建构建规则。还会添加每个目录的预处理器定义。<variable>存储生成文件列表的变量名。
<files>一个或多个输入源文件。
TARGET如果指定,则
<target>的INTERFACE_INCLUDE_DIRECTORIES和INTERFACE_COMPILE_DEFINITIONS目标属性将被传递给moc。OPTIONS传递给
moc的可选选项列表,例如执行moc -help时找到的选项。
注意
不要使用
qt4_wrap_cpp(),而是可以将CMAKE_AUTOMOC变量设置为自动处理moc的源文件。
- qt4_wrap_ui¶
创建用于对给定的 Qt Designer UI 输入文件列表运行
uic的构建规则。qt4_wrap_ui(<variable> <files>... [OPTIONS <options>...])
<variable>存储生成的文件名列表的变量名。
<files>一个或多个 Qt Designer UI 输入源文件。
OPTIONS传递给
uic的可选选项列表,例如执行uic -help时找到的选项。
注意
不要使用
qt4_wrap_ui(),而是可以将CMAKE_AUTOUIC变量设置为自动处理uic的 UI 文件。
- qt4_add_resources¶
创建用于对给定的输入 Qt 资源文件列表运行
rcc的构建规则。qt4_add_resources(<variable> <files>... [OPTIONS <options>...])
<variable>存储生成的文件名列表的变量名。
<files>一个或多个 Qt 资源输入源文件。
OPTIONS传递给
rcc的可选选项列表,例如执行rcc -help时找到的选项。
注意
不要使用
qt4_add_resources(),而是可以将CMAKE_AUTORCC变量设置为自动处理rcc的资源文件。
- qt4_generate_moc¶
创建一个构建规则,通过在给定的输入文件上运行
moc来生成输出文件。qt4_generate_moc(<input-file> <output-file> [TARGET <target>])
此宏为
<input-file>创建一个构建规则,以生成<output-file>。如果由于某种原因qt4_wrap_cpp()不可行,例如因为需要自定义 moc 文件的文件名,则使用此宏。TARGET如果指定,则
<target>的INTERFACE_INCLUDE_DIRECTORIES和INTERFACE_COMPILE_DEFINITIONS目标属性将被传递给moc。
- qt4_add_dbus_interface¶
从 XML 接口文件创建接口头文件和实现文件。
qt4_add_dbus_interface(<variable> <interface-file> <basename>)
此宏从给定的接口 XML 文件
<interface-file>创建接口头文件(<basename>.h)和实现文件(<basename>.{cpp,moc}),并将其添加到包含源文件列表的变量中(指定为变量名<variable>)。可以通过在输入文件
<interface-file>上设置以下源文件属性来将其他参数传递给qdbusxml2cpp调用:INCLUDE给定的文件将包含在生成的接口头文件中。
CLASSNAME生成的类名。
NO_NAMESPACE生成的类将不会被包装在命名空间中。
- qt4_add_dbus_interfaces¶
从多个 XML 接口文件创建接口头文件和实现文件。
qt4_add_dbus_interfaces(<variable> <interface-files>...)
此宏为所有列出的 XML 接口文件
<interface-files>创建接口头文件和实现文件。基名将根据 XML 文件名自动确定。生成的输出文件列表存储在变量<variable>中。为
qt4_add_dbus_interface()描述的源文件属性也适用于此处。
- qt4_add_dbus_adaptor¶
为 D-Bus 接口生成适配器类。
qt4_add_dbus_adaptor(<variable> <xmlfile> <parent-header> <parent-classname> [<basename>] [<classname>])
从描述接口的 XML 文件创建 D-Bus 适配器(头文件和实现文件),并将其添加到源文件列表中。适配器将调用转发给在
<parent-header>中定义的、名为<parent-classname>的父类。生成的默认文件名将是<basename>adaptor.{cpp,h},其中<basename>是 XML 文件名的基名(如果未给出)。如果提供了<classname>,则它将用作适配器本身的类名。生成的FILENAME存储在变量<variable>中。
- qt4_generate_dbus_interface¶
从给定的头文件生成 D-Bus XML 接口文件。
qt4_generate_dbus_interface(<header> [<interface>] [OPTIONS <options>...])
此宏创建一个构建规则,用于从给定的
<header>文件中提取声明,以生成相应的 XML 接口文件。<header>从中生成 XML 接口文件的头文件路径。
<interface>生成的 XML 接口文件路径。如果省略此可选参数,则接口文件名将从头文件基名构造,并附加
.xml后缀。相对路径被解释为相对于CMAKE_CURRENT_BINARY_DIR。OPTIONS可以传递给
qdbuscpp2xml的选项列表,例如执行qdbuscpp2xml --help时找到的选项。
- qt4_create_translation¶
创建用于生成 TS 和 QM 文件的构建规则。
qt4_create_translation(<qm-files-var> <directories>... <sources>... <ts-files>... [OPTIONS <options>...])
此宏创建构建规则,通过
lupdate生成 TS(翻译源文件.ts)文件,并通过lrelease从给定的<directories>和/或<sources>生成 QM(Qt 消息文件.qm)文件。TS 文件在源树中创建和/或更新(除非提供了完整路径)。QM 文件在构建树中生成。<qm-files-var>生成的 QM 文件列表存储在此变量中。可以通过将
<qm-files-var>添加到项目库/可执行文件的源列表来更新翻译,以便始终更新它们,或者通过添加自定义目标来控制何时更新/生成它们。<directories>包含源文件的目录列表。
<sources>源文件列表。
<ts-files>TS(翻译源)文件列表。
OPTIONS传递给
lupdate的可选标志列表,例如-extensions,用于指定目录扫描的文件扩展名。
- qt4_add_translation¶
创建用于从给定的 TS 文件生成 QM 文件的构建规则。
qt4_add_translation(<qm-files-var> <ts-files>...)
此宏创建从给定的 TS 文件生成 QM 文件的构建规则,并将生成的 QM 文件名列表存储在
<qm-files-var>变量中。<ts-files>必须存在,并且不会以任何方式更新。
- qt4_automoc¶
已弃用,版本 2.8.11 起: 请使用
CMAKE_AUTOMOC变量提供的功能。在输入文件上运行
moc。qt4_automoc(<source-files>... [TARGET <target>])
此宏可用于自动处理
moc。例如,如果存在foo.h和foo.cpp文件,并且在foo.h中有一个类使用了Q_OBJECT预处理器宏,则必须在foo.h上运行moc。如果不想使用qt4_wrap_cpp()(尽管它可靠且成熟),可以将#include "foo.moc"插入到foo.cpp中,然后将foo.cpp作为参数传递给qt4_automoc()。这将扫描配置阶段列出的所有文件<source-files>,如果找到包含的 moc 文件,则会生成一个规则,在构建时在配套的头文件foo.h上运行 moc。如果源文件设置了SKIP_AUTOMOC属性,则该文件将被此宏忽略。TARGET如果指定,则
<target>的INTERFACE_INCLUDE_DIRECTORIES和INTERFACE_COMPILE_DEFINITIONS目标属性将被传递给moc。
- qt4_use_modules¶
已弃用,版本 2.8.11 起: 请改用
target_link_libraries()和 导入目标。为项目提供 Qt 模块以链接到目标。
qt4_use_modules(<target> [<LINK_PUBLIC|LINK_PRIVATE>] <modules>...)
此函数使
<target>使用 Qt 的<modules>。使用 Qt 模块意味着链接到库、添加模块的相关包含目录以及添加使用该模块的相关编译器定义。模块大致相当于 Qt4 组件。LINK_PUBLIC或LINK_PRIVATE可选的链接模式,用作
target_link_libraries()调用中的相应参数。
例如,调用
qt4_use_modules(myexe Core Gui Declarative)将在项目目标myexe上使用QtCore、QtGui和QtDeclarative组件。
已弃用变量¶
以下变量提供用于向后兼容性
QT4_FOUND已弃用,版本 2.8.11 起: 使用
Qt4_FOUND,它具有相同的值。
示例¶
典型的查找 Qt4 的用法可能如下所示:
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt4 4.4.3 REQUIRED QtGui QtXml)
add_executable(myexe main.cpp)
target_link_libraries(myexe PRIVATE Qt4::QtGui Qt4::QtXml)