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

Leave a Reply

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

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