FindQt4¶
查找和使用 Qt4¶
这个模块可以用来查找Qt4。最重要的问题是 Qt4 qmake 可以通过系统路径获得。这个 qmake 然后基本上用于检测其他所有内容。该模块定义了许多 IMPORTED 目标、宏和变量。
典型的用法可能是这样的:
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 Qt4::QtGui Qt4::QtXml)
Qt 构建工具¶
Qt 依赖于一些捆绑的代码生成工具,例如用于元对象代码生成的``moc``,用于小部件布局和填充的``uic``,以及用于虚拟文件系统内容生成的``rcc``。如果满足适当的条件,这些工具可能会被 cmake(1) 自动调用。有关更多信息,请参见 cmake-qt(7)。
Qt 宏¶
在某些情况下,以更手动的方式调用 Qt 构建工具可能是必要的或有用的。有几个宏可用于为此类用途添加目标。
macro QT4_WRAP_CPP(outfiles inputfile ... [TARGET tgt] OPTIONS ...)
create moc code from a list of files containing Qt class with
the Q_OBJECT declaration. Per-directory preprocessor definitions
are also added. If the <tgt> is specified, the
INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from
the <tgt> are passed to moc. Options may be given to moc, such as
those found when executing "moc -help".
macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...)
create code from a list of Qt designer ui files.
Options may be given to uic, such as those found
when executing "uic -help"
macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...)
create code from a list of Qt resource files.
Options may be given to rcc, such as those found
when executing "rcc -help"
macro QT4_GENERATE_MOC(inputfile outputfile [TARGET tgt])
creates a rule to run moc on infile and create outfile.
Use this if for some reason QT4_WRAP_CPP() isn't appropriate, e.g.
because you need a custom filename for the moc file or something
similar. If the <tgt> is specified, the
INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from
the <tgt> are passed to moc.
macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename)
Create the interface header and implementation files with the
given basename from the given interface xml file and add it to
the list of sources.
You can pass additional parameters to the qdbusxml2cpp call by setting
properties on the input file:
INCLUDE the given file will be included in the generate interface header
CLASSNAME the generated class is named accordingly
NO_NAMESPACE the generated class is not wrapped in a namespace
macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... )
Create the interface header and implementation files
for all listed interface xml files.
The basename will be automatically determined from the name
of the xml file.
The source file properties described for
QT4_ADD_DBUS_INTERFACE also apply here.
macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname
[basename] [classname])
create a dbus adaptor (header and implementation file) from the xml file
describing the interface, and add it to the list of sources. The adaptor
forwards the calls to a parent class, defined in parentheader and named
parentclassname. The name of the generated files will be
<basename>adaptor.{cpp,h} where basename defaults to the basename of the
xml file.
If <classname> is provided, then it will be used as the classname of the
adaptor itself.
macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...)
generate the xml interface file from the given header.
If the optional argument interfacename is omitted, the name of the
interface file is constructed from the basename of the header with
the suffix .xml appended.
Options may be given to qdbuscpp2xml, such as those found when
executing "qdbuscpp2xml --help"
macro QT4_CREATE_TRANSLATION( qm_files directories ... sources ...
ts_files ... OPTIONS ...)
out: qm_files
in: directories sources ts_files
options: flags to pass to lupdate, such as -extensions to specify
extensions for a directory scan.
generates commands to create .ts (via lupdate) and .qm
(via lrelease) - files from directories and/or sources. The ts files are
created and/or updated in the source tree (unless given with full paths).
The qm files are generated in the build tree.
Updating the translations can be done by adding the qm_files
to the source list of your library/executable, so they are
always updated, or by adding a custom target to control when
they get updated/generated.
macro QT4_ADD_TRANSLATION( qm_files ts_files ... )
out: qm_files
in: ts_files
generates commands to create .qm from .ts - files. The generated
filenames can be found in qm_files. The ts_files
must exist and are not updated in any way.
macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... [TARGET tgt])
The qt4_automoc macro is obsolete. Use the CMAKE_AUTOMOC feature instead.
This macro is still experimental.
It can be used to have moc automatically handled.
So if you have the files foo.h and foo.cpp, and in foo.h a
a class uses the Q_OBJECT macro, moc has to run on it. If you don't
want to use QT4_WRAP_CPP() (which is reliable and mature), you can insert
#include "foo.moc"
in foo.cpp and then give foo.cpp as argument to QT4_AUTOMOC(). This will
scan all listed files at cmake-time for such included moc files and if it
finds them cause a rule to be generated to run moc at build time on the
accompanying header file foo.h.
If a source file has the SKIP_AUTOMOC property set it will be ignored by
this macro.
If the <tgt> is specified, the INTERFACE_INCLUDE_DIRECTORIES and
INTERFACE_COMPILE_DEFINITIONS from the <tgt> are passed to moc.
function QT4_USE_MODULES( target [link_type] modules...)
This function is obsolete. Use target_link_libraries with IMPORTED targets
instead.
Make <target> use the <modules> from Qt. Using a Qt module means
to link to the library, add the relevant include directories for the
module, and add the relevant compiler defines for using the module.
Modules are roughly equivalent to components of Qt4, so usage would be
something like:
qt4_use_modules(myexe Core Gui Declarative)
to use QtCore, QtGui and QtDeclarative. The optional <link_type> argument
can be specified as either LINK_PUBLIC or LINK_PRIVATE to specify the
same argument to the target_link_libraries call.
进口目标¶
特定的 Qt 库可以通过使用相应的 IMPORTED 目标和 target_link_libraries() 命令来使用:
target_link_libraries(myexe Qt4::QtGui Qt4::QtXml)
以这种方式使用目标会导致 :cmake(1)` 在编译 myexe 时为目标使用适当的包含目录和编译定义。
目标知道它们的依赖关系,例如,如果列出了另一个 Qt 库,则不必列出“Qt4::QtCore”,如果“Qt4”,则不必列出“Qt4::QtGui” ::QtDeclarative`` 已列出。可以使用 if(TARGET) 命令以通常的方式测试目标是否存在。
Qt 工具包可能同时包含调试和发布库。 cmake(1) 将根据构建配置选择合适的版本。
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::Qt多媒体Qt多媒体目标
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::phonon声子目标
结果变量¶
下面是 FindQt4.cmake 设置的变量的详细列表。
Qt4_FOUND如果为 false,请不要尝试使用 Qt 4。
QT_FOUND如果为 false,请不要尝试使用 Qt。此变量仅用于兼容性。
QT4_FOUND如果为 false,请不要尝试使用 Qt 4。此变量仅用于兼容性。
QT_VERSION_MAJOR找到 Qt 的主要版本。
QT_VERSION_MINOR找到 Qt 的次要版本。
QT_VERSION_PATCH找到Qt的补丁版本。