読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

CMakeでQt5を使う

CMakeでQt5を使う方法がやっとわかったのでメモ。というか対応してたじゃねーかー...
とりあえず以下が参考記事

http://www.kdab.com/using-cmake-with-qt-5/
http://qt.developpez.com/doc/5.0-snapshot/cmake-manual/

CMakeのバージョンは2.8.10.2を用いる。2.8.8 or laterなら同じことができると思う。それ以前だとこの記事のやり方ではダメなので上のURLを参考にして貰いたい。


まず、以下のような簡単なmain.cppをビルドする

#include<QApplication>
#include<QLabel>

int main(int argc,char** argv){
        QApplication app(argc,argv);

        QLabel* l = new QLabel("hello world");
        l->show();

        return app.exec();
}

CMakeLists.txtは

PROJECT(TEST_PROJECT)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.10.2)
FIND_PACKAGE(Qt5Widgets REQUIRED)
MESSAGE(STATUS "Qt5 --> ${Qt5Widgets_VERSION_STRING}") #この行はQtのバージョンを表示する。無いならなくてもいい

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

ADD_EXECUTABLE(helloworld_qt ${PROJECT_SOURCE_DIR}/main.cpp)
QT5_USE_MODULES(helloworld_qt Widgets)

このようにQt4に比べて非常に短く書くことができるようだ。
ポイントはfind_packageの書き方と、setを使って上のようにある2つの変数をONにすること。
そしてTARGET_LINK_LIBRARYでQtLibraryをリンクするのではなくQT5_USE_MODULESコマンドを用いることで代用するということ。

上の2つのSET

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

は必ず必要なのでコピペしてそのまま書く。

そして、最後のQT5_USE_MODULESにはプログラムで用いるモジュールを指定する。
今回はQLabelとQApplicationくらいしか使ってないので"Widgets"だけで良いが、例えばQtのXML周りを使うなら

QT5_USE_MODULES(helloworld_qt Widgets Xml)

のように指定する。


基本的にはこんな感じ。また、リソースを用いる場合は以前のバージョンと同様にして

QT5_ADD_RESOURCES(QRC ${PROJECT_SOURCE_DIR}/main.qrc)

のようにしてqrcファイルを指定。これをコンパイル時に含めるようにする。

QT5_ADD_RESOURCES(QRC ${SRC_DIR}/main.qrc)
...
ADD_EXECUTABLE(hello ${SOURCES} ${QRC})

という感じ。


また、上の例はADD_EXECUTABLEで実行ファイルを作る例だが、同様にしてADD_LIBRARYもできる。
ライブラリをビルドする場合もTARGET_LINK_LIBRARYは使わずに"QT5_USE_MODULES"を用いる。


これは試していないのだが、おそらくQtQuickを使ったプロジェクトをビルドする場合は

FIND_PACKAGE(Qt5Widgets)
FIND_PACKAGE(Qt5Declarative)

とQt5Declarativeが必要で、QT5_USE_MODULESにも書く必要がある。

とりあえず基本的なのはこのくらいかな?


Firefox ブラウザ無料ダウンロード