なかなか情報もないので・・・ハマりどころメモとか。
一次情報はこちら。
Qt Creator 4.0系になってから、CMake対応強化がリリースノートに乗ることが増えてきています。実際、そこそこ使える(CLionと互角ぐらい)という印象ではあるんですが、ハマりどころも多そうなので、気づいたらメモしていこうと思います。
CMakeとは
メタなMakeです。MakefileやらVisual Studioのプロジェクトファイルやらxcodeのプロジェクトファイルやらを生成し、実際のビルドは他のツールが行います。そういう意味ではQMakeとほぼおなじですね。
CMakeは今後はデファクトになりそうな感じではありますが、結構覚えることも多く、使うのは簡単ではないです。覚悟は必要です。QMakeの方がシンプルです。ただ、Qt以外のプロジェクトでも使われることが多いので、Qt外のライブラリを利用するとかは便利になっていきそうです。
Qt Creator + CMakeの処理の流れ
Qt CreatorではCMakeのビルドファイルであるCMakeLists.txtをプロジェクトファイルとして扱えます。QMakeよりもちょっと凝った内容になっています。なにせ、CMake自身も手続き型スクリプト言語としていろんなことがでてしまうからです。
Qt Creatorは、まず一回ビルドの手前のMakefile作成まで行い、その結果のファイルをパースしてプロジェクトファイル一覧を取得しています。プロジェクトを開く時の動作はQMakeを使っているときよりもワンテンポ遅れます。
Qt Creator + CMakeのトラブルQ&A
Qt Creator + CMakeの組み合わせでのみ問題が起きる、というケースを紹介します。違うOS、もしくはコマンドラインでは正しくビルドできているのに、GUIだとなぜか、というケースです。
ビルドが何かエラーになる
build-[アプリ名]-mingw32-リリース
と日本語の出力先になっていて、それがうまく処理できずにMakefile生成段階で失敗しているということがありました。Macだと日本語のままでも大丈夫ですが、Windowsだとダメでした。
プロジェクト設定のビルドと実行タブのCMake内のビルドディレクトリを英語のReleaseとかに直してあげれば直ると思います。一度日本語UIのQt Creatorで開いてしまったら、後から表示言語を英語とかに直しても、以前の設定が残ってしまっているため、失敗します。逆に、ディレクトリ名を直してしまえば日本語UIでも大丈夫です。
プロジェクトのファイル一覧に何も出ない
CMakeのバックエンドで使うビルドシステムを正しく設定してあげる必要があります。Macだと一種類しかないので問題ないですが、WindowsだとVisual Studioとかmingwとかあるので注意が必要です。
場所はWindowsだとツール
→オプション
→ビルドと実行
のページを開き、キット
の中です。Qtと一緒にインストールするmingw32の場合、 CodeBlocks - MinGW Makefile
を選びます。 MinGW Makefile
だけではダメです。
プロジェクトにファイルを追加しても表示されない
CMakeを再実行しないと、プロジェクトに追加したファイルは表示されません。ビルド
→CMakeの実行
を行ってください。
operator delete(void*)がundefined reference
これ以外にも、言語そのもののAPIが見当たらない、というケースです。Windowsでコマンドラインではg++をC++のコンパイラとして使ってくれるのに、よく見るとi686-w64-mingw32-gcc.exeが使われている・・・
修正箇所は2箇所です。全体設定とプロジェクト設定。おそらく、CMakeのプロジェクトを新規に開く時に全体設定を引き継いでしまうので、全体設定だけを直してもダメっぽいです。
全体設定はツール
→オプション
→ビルドと実行
のページを開き、コンパイラ
です。MinGWとかを選択して、コンパイラのパスをg++.exe
にします。
プロジェクト設定はプロジェクト
→ビルドと実行のCMake
の中です。CMAKE_CXX_COMPILER
がCコンパイラになっているので、g++.exe
とかにすれば大丈夫そうに思いきや、いくら変更してもダメです。CMakeLists.txt.userを削除してプロジェクトを開き直してください。