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

syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

Qtでgcc/g++のオプションを指定する

Qt プログラミングTips

クロスプラットフォームC++向けGUIアプリケーションフレームワークとして、GTK+の他にQtというのがあります。GTK+とQtはともにGNU LGPLライセンスらしいです。
Qt用の標準IDEであるQt CreatorにはQtライブラリとMinGW環境が同梱されているんですが、Qtで例えばg++のC++11モード(C++0xモード)を使いたい場合、Qt CreatorのGUIから設定することはできないっぽいです。代わりに、Qtのプロジェクト(ワークスペース)ファイルである.proファイルを直接編集してやる必要があります。
具体的には適当なテキストエディタで.proファイルを開いて、末尾あたりにでも

QMAKE_CXXFLAGS += -std=c++0x -U__STRICT_ANSI__

という行を追加してやります。
Qt Creatorは.proファイルをもとにして、g++/gcc用のmakeファイルを自動生成してコンパイル&ビルドする方式らしく、コンパイルオプションを変更する場合はmakeファイルを直接いじるのではなく、そのジェネレータである.proファイルを操作する形になります。
ただこれはQt Creator 2.0 + Qt 4.7 + gcc 4.4の環境で検証したものなので、もっと新しいバージョンでは改善されているかもしれません。
なお、ビルドと同時にアセンブルコードを検証してみようと思って、

QMAKE_CXXFLAGS += -S

を追加してみたんですが、

c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe:debug/main.o: file format not recognized; treating as linker script

c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe:debug/main.o:1: syntax error

collect2: ld returned 1 exit status

というエラーメッセージが出てビルド不能になりました……
ld.exeってのはリンカーで、VC++でいうlink.exeに相当するプロセスなんですが、なんかオブジェクトコードが不正だとかぬかしてます。