Qtの設定 - qmake

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2021年9月28日 (火) 13:38時点におけるWiki (トーク | 投稿記録)による版 (→‎DEFINESマクロ)
ナビゲーションに移動 検索に移動

概要



コンパイラの設定

GCCやG++コンパイラ等を標準以外に変更する場合、プロジェクトファイル(.pro拡張子)に以下の設定を追記する。

  • QMAKE_CC
    C言語のソースコードを含むプロジェクトをビルドする時に使用されるC言語のコンパイラを指定する。
    QMAKE_CC = /<GCCのインストールディレクトリ>/bin/gcc-10.2
    また、環境変数PATHにGCCやG++等のパスを設定している場合、以下のように、コンパイラのファイル名だけで指定することができる。
    QMAKE_CC = gcc-10.2

    QMAKE_CCオプションは、CONFIGオプションよりも上に記述する。


  • QMAKE_CXX
    C++言語のソースコードを含むプロジェクトをビルドする時に使用されるC++言語のコンパイラを指定する。
    QMAKE_CXX = /<GCCのインストールディレクトリ>/bin/g++-10.2
    また、環境変数PATHにGCCやG++等のパスを設定している場合、コンパイラのファイル名だけで指定することができる。
    QMAKE_CXX = g++-10.2

    QMAKE_CXXオプションは、CONFIGオプションよりも上に記述する。


  • QMAKE_CFLAGS
    プロジェクトをビルドするためのC言語のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CFLAGS_DEBUGと変数QMAKE_CFLAGS_RELEASEを変更することで調整できる。


  • QMAKE_CFLAGS_DEBUG
    デバッグビルドのC言語のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_CFLAGS_RELEASE
    リリースビルドのC言語のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_CXXFLAGS
    プロジェクトをビルドするためのC++のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    デバッグモードとリリースモードの固有のフラグは、それぞれ変数QMAKE_CXXFLAGS_DEBUGと変数QMAKE_CXXFLAGS_RELEASEを変更することで調整できる。


  • QMAKE_CXXFLAGS_DEBUG
    デバッグビルドのC++のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_CXXFLAGS_RELEASE
    リリースビルドのC++のコンパイラフラグを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_LINK
    アプリケーションベースのプロジェクトを構築する時に使用するリンカを指定する。
    環境変数PATHに含まれるパス上にある場合、リンカファイルのファイル名のみを指定することができる。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。



インクルードの設定

  • INCLUDEPATH
    プロジェクトのコンパイル時に検索するインクルードディレクトリを指定する。
    例 :
    INCLUDEPATH += /home/user/include

    スペースを含むパスを指定するには、以下のように記述する。
    UNIX系OSの場合 INCLUDEPATH += "/home/user/extra headers"
    Windowsの場合 INCLUDEPATH += "C:/myincludes/extra headers"


  • QMAKE_INCDIR
    INCLUDEPATHに追加されるシステムヘッダのパスのリストを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。



ライブラリの設定

  • LIBS
    プロジェクトにリンクするライブラリのリストを指定する。
    UNIX系OSにおいて、-l(ライブラリ)フラグと-L(ライブラリパス)フラグを使用する場合、
    qmakeはWindowsでライブラリを正しく処理する。(ライブラリのフルパスをリンカに渡す)
    -lで指定されているディレクトリを見つけるには、ライブラリが存在している必要があります。
    例 :
    UNIX系OSの場合 LIBS += -L/usr/local/lib -lmath
    Windowsの場合 LIBS += c:/mylibs/math.lib

    また、スペースを含むパスを指定するには、以下のように記述する。
    UNIX系OSの場合 LIBS += "-L/usr/local lib/lib" -lmath
    Windowsの場合 LIBS += "C:/mylibs lib/math.lib"

    標準では、LIBSに格納されているライブラリのリストは、使用される前に一意の名前のリストに縮小される。
    この動作を変更するには、変数CONFIGにno_lflags_mergeオプションを追加する。
    CONFIG += no_lflags_merge


  • LIBS_PRIVATE
    プロジェクトにプライベートリンクするライブラリのリストを指定する。
    この変数の動作はLIBSと同じであるが、UNIX用の共有ライブラリプロジェクトがリンクインターフェイスで、これらの依存関係を公開しない点が異なる。

    例えば、あるプロジェクトがライブラリA(ライブラリAは、ライブラリBにプライベートに依存)に依存している場合、
    プロジェクトからもライブラリBを直接使用する場合、ライブラリBに明示的にリンクする必要があるということである。
    言い換えると、プライベートにリンクされたライブラリは、ビルド時に推移的に公開されない。


  • QMAKE_LIBDIR
    全てのプロジェクトのライブラリ検索パスのリストを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    プロジェクトファイルで追加のライブラリ検索パスを指定するには、LIBSを使用する。
    LIBS += -L/path/to/libraries


  • QMAKE_LIBDIR_POST
    全てのプロジェクトのシステムライブラリ検索パスのリストを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_LIBDIR_FLAGS
    この変数は、UNIX系OSでのみ使用される。
    接頭辞-Lが付いた全てのライブラリディレクトリの場所を指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。


  • QMAKE_LIBS
    各プロジェクトがリンクする必要のある追加のライブラリを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    プロジェクトファイルでライブラリを指定するには、LIBSを使用する。


  • QMAKE_LIBS_PRIVATE
    各プロジェクトがリンクする必要のある追加のプライベートライブラリを指定する。
    この変数の値は、qmakeまたはqmake.confによって処理され、変更する必要はほとんど無い。
    プロジェクトファイルでプライベートライブラリを指定するには、LIBS_PRIVATEを使用する。



インストールの設定

  • INSTALLS
    make installコマンドまたは同様のインストール手順が実行される場合、インストールされるリソースのリストを指定する。
    リスト内の各項目は、インストールされる場所に関する情報を提供する属性を指定する。
    この変数は、組み込みデバイスに展開される追加ファイルを指定するためにも使用される。

    例えば、変数target.pathは、ビルドターゲットがインストールされる場所を示し、
    変数INSTALLSは、インストールされる既存のリソースのリストにビルドターゲットを追加する。
    target.path += $$[QT_INSTALL_PLUGINS]/imageformats
    INSTALLS += target

    下表に、変数INSTALLSにおけるいくつかの値を記載する。
説明
no_check_exist この値が設定されていない場合、qmakeはインストールするファイルが実際に存在するかどうかを確認する。
これらのファイルが存在しない場合、qmakeはインストールルールを作成しない。
qdocによって作成されたHTMLファイル等、ビルドプロセスの一部として生成されたファイルをインストールする必要がある場合は、
この値を使用する。
nostrip この値が設定されている場合、UNIXのストリップ機能はオフになり、デバッグ情報はバイナリに残る。
executable この値が設定されている場合、UNIX系OSでは、実行可能フラグが設定される。
no_build make installコマンドを実行した時、まだプロジェクトのビルドが無い場合、プロジェクトをビルドされた後にインストールされる。
この動作を望まない場合は、この値を設定して、ビルドターゲットがインストールターゲットへの依存関係として追加されないようにする。
no_default_install プロジェクトにトップレベルのプロジェクトターゲットが存在する場合、make installコマンドを実行すると、全てがインストールされる。
ただし、この値が設定されたインストールターゲットがある場合、標準ではインストールされない。
明示的に、make install_<file>コマンドを実行する必要がある。



qDebug関数の出力を抑止する

標準の設定では、リリースビルドでもqDebug関数の出力が有効になっている。
リリースビルドでqDebug関数で出力しないように設定するには、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT


qInfo関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_INFO_OUTPUT


qWarning関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_WARNING_OUTPUT


qCritical関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_CRITICAL_OUTPUT


qFatal関数の出力を抑止する場合、プロジェクトファイル(.pro)に以下を追記する。

CONFIG(release, debug|release):DEFINES += QT_NO_FATAL_OUTPUT



デプロイ時のディレクトリの変更

デプロイ時において、DebugモードとReleaseモードのディレクトリを変更する時、.proファイルに以下の設定を記述する。
以下の設定により、デプロイ時のDebugディレクトリ名は、"プロジェクト名 + d"となる。

TARGET_NAME = $${TARGET}
if(debug)
{
    TARGET_NAME = $${TARGET}d
}



インストール時のディレクトリの変更

qmakeコマンド実行時のインストールディレクトリは、targetパラメータで指定する。

以下の例では、.proファイルに変数PREFIXを定義して、標準のインストールディレクトリを/usr/localディレクトリとしており、
qmakeコマンド実行時にPREFIXオプションを使用した場合は、その該当ディレクトリをインストールディレクトリとしている。

 # ...略
 
 isEmpty(PREFIX) {
    PREFIX = /usr/local
 }
 
 #target = Software_Name
 target.path = $${PREFIX}/
 INSTALLS += target
 
 # ...略


上記の設定を記述した後、qmakeコマンドにPREFIXオプションを付加して実行する。

qmake ./<Qtプロジェクト>.pro PREFIX=$HOME/InstallSoftware/Software_Name



DEFINESマクロ

応用 : qmakeコマンド実行時にコンパイルするファイルを変更する

以下の例では、qmakeコマンドの実行時において、MACHINE=pinephoneオプションを付加することで、QMLファイルを動的に変更することができる。

qmake ./〜.pro MACHINE=pinephone


# .proファイル

# ...略
 
isEqual(MACHINE, pinephone) {
   DEFINES += "PINEPHONE" \
}

# ...略


 // main.cppファイル
 
 int main(int argc, char *argv[])
 {
    // ...略
 
 #ifdef PINEPHONE
    const QUrl url(QStringLiteral("qrc:/mainPinePhone.qml"));
 #else
    const QUrl url(QStringLiteral("qrc:/main.qml")); 
 #endif
 
    // ...略
 }



messageマクロ

qmakeコマンド実行時において、ターミナルにメッセージを出力する場合は、messageマクロを使用する。

message(<メッセージ内容>)

# 例1. "Build Start"と表示する
message(Build Start)

# 例2. 変数DESTDIRの内容を出力する
message(DESTDIR: ($$DESTDIR))