Qt / qmake / 簡単なリソースファイルの取り扱い方
先の記事のあーうーから、結局自前で簡単なスクリプトを qmake の .pro に書いてみる事にした。
状況
.cxxなどの通常のビルド対象の他に、 .qml とか .png とか .mp3 とかそういう外部リソースファイルがある場合に、 qmake が生成する Makefile でよしなにDESTDIRへコピーや削除が行われる様にしたい。
実装方法
qmakeに食べさせる .pro に次の様に実装する。
resources += \ test.qml \ test.png \ QMAKE_POST_LINK = @ for(t, resources) { QMAKE_POST_LINK += cp -rv $$PWD/$$t $$OUT_PWD/$$t ; } QMAKE_CLEAN += $$resources
resources に DESTDIR へ出力したいリソースファイル群を定義する。これは .pro からの相対パスで指定する。使うだけならばここだけ書き換えればOK。
QMAKE_POST_LINKはqmakeによって生成されたMakefileがリンカーを走らせた後に実行する単一のコマンド。"単一の"というのがポイントで、 += で空白文字区切りにコマンドを入れても結果的には単に1回だけのコマンドとして全体が評価される。よってはじめに @ を付けコマンド自体の出力を抑制し、 cp に v オプションを付けコピー状況が明示される様にし、かつresourcesから取り出した1つあたりにつき ; でコマンドを区切る様にしてある。
QMAKE_CLEANは空白文字区切りで make clean の際に追加で削除を指示したいパスを放り込む。
効果
qmake を行うビルドと実行用の作業ディレクトリーがソースのディレクトリーと異なる場合でも、makeによりリソースが正常にコピーされ、またmake cleanも一応程度に対応する。
余談
この記事書いてる中の人はVimで .pro .cxx .qml など書いて qmake とか make とかシェルで叩いてます。qmlのビジュアルな編集がしたいなーって時は qtcreator hoge.qml とかその為に動かす程度にはGUIも使うけどね・x・
そんな状態でも、 QtCreator に .pro を読ませればGUI環境がいいってメンバーとの連携もできて、かつ基本的な .pro とかその他ソースはテキストエディターさえあれば全く支障なく編集し、ビルドし、テストもできる。qmakeを使うとcmakeよりも定義量も少なく(特にQtを使う場合は勿論なおさらに)て楽です。一般的なライブラリーの検索とリンクなどはcmakeの方が便利な事もあるかもしれないけど、-Iとか-Lとか指示するだけの事だし、何事も割とqmakeに以降するのもいいのかなーなんて思い出してるところです。