My CMake Tutorial 4

这篇的目的是教你 CMake 如何和 Qt 搅基。

总所周知的是,CMake和Qt自古就搅基搅的很深,CMake自带的find_package脚本其实蛮少,不过其中确绝对会有 Qt 的和KDE的,即使所引用的KDE的cmake脚本其实在KDE Libs里面。

说是介绍,其实主要是介绍一些在QtMacro.cmake里面的宏,cmake的自带脚本都在 /usr/share/cmake-<version>/Modules 下面,可以自行查看。

在开始之前,先来说说Qt的moc。Qt的信号和槽的机制其实大部分是靠代码生成的,Qt自带了一个名为moc的工具,负责解析C++的源文件,并且生成相关的代码。moc是meta object compiler 的缩写,关于moc都干了什么可以自己放狗去搜。

qt4_wrap_cpp(<varname> <header file(s)>)

用来把头文件生成moc文件,并且对应的文件名写到<varname>里面去。

这样你可以在增加target的时候直接使用<varname>和你的cpp文件,这样就可以一起编译了。

当然对于KDE来说,有更方便的automoc,这里按下不表。

Qt DBus

DBus 的接口是通过xml文件指定的,qt也提供了按照DBus的introspect的xml文件直接生成代码的方法,具体来说有两边,一个是adaptor,一个是interface。adaptor是作为实现dbus那一方的,而interface则是调用dbus那一方的。

https://github.com/fcitx/kcm-fcitx/blob/master/src/CMakeLists.txt

例如这里

QT4_ADD_DBUS_INTERFACE(kcm_SRCS
    org.fcitx.Fcitx.InputMethod.xml
    org.fcitx.Fcitx.InputMethod
)

最后就会生成 org.fcitx.Fcitx.InputMethod.h 这个文件,然后直接include就可以直接使用这个类啦。

类似的adaptor则是相当于注册服务的那一方。

This entry was posted in cmake and tagged . Bookmark the permalink.

3 Responses to My CMake Tutorial 4

  1. nihui says:
    Internet Explorer 9.0 Windows 7

    cmake 2.8.6 直接支持 AUTOMOC~~~ –> http://blogs.kde.org/node/4495
    那两个叫adaptor和proxy吧。。

    [Reply]
  2. nihui says:
    Internet Explorer 9.0 Windows 7

    支持css继续创作这个系列的文章!

    [Reply]
  3. csslayer says:
    Firefox 13.0a2 Windows 7

    @nihui 谁让有些弱b系统cmake版本那个低哦……

    [Reply]

Leave a Reply

Your email address will not be published. Required fields are marked *

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).

This site uses Akismet to reduce spam. Learn how your comment data is processed.