このページでは

置換関数

qmake は、設定プロセス中に変数の内容を処理するための関数を提供しています。これらの関数は「置換関数」と呼ばれます。通常、これらの関数は、他の変数に代入できる値を返します。これらの値は、関数の先頭に$$ 演算子を付けることで取得できます。置換関数は、組み込み関数と関数ライブラリに分類されます。

「テスト関数」も参照してください。

組み込みの置換関数

基本的な置換関数は、組み込み関数として実装されています。

absolute_path(path[, base])

path の絶対パスを返します。

base が指定されていない場合は、現在のディレクトリを基ディレクトリとして使用します。相対パスである場合は、使用前に現在のディレクトリを基準として解決されます。

たとえば、次の呼び出しでは、文字列 `"/home/johndoe/myproject/readme.txt"` が返されます。

message($$absolute_path("readme.txt", "/home/johndoe/myproject"))

この関数は Qt 5.0 で導入されました。

clean_path()、relative_path() も参照してください。

basename(variablename)

variablename で指定されたファイルのベース名を返します。

例:

FILE = /etc/passwd
FILENAME = $$basename(FILE) #passwd

cat(filename[, mode])

filename の内容を返します。mode には、以下のオプションを指定できます:

  • blob ファイルの内容全体を1つの値として返す
  • lines 各行を個別の値として返す(改行文字なし)
  • true (デフォルト値)および `false ` は、qmakeの値リスト分割ルール(変数代入時と同様)に従って分割された個別の値としてファイルの内容を返します。mode が `false` の場合、ファイル内の改行位置を示すために、改行文字のみを含む値がリストに挿入されます。

clean_path(path)

ディレクトリ区切り文字を正規化(「/」に変換)し、余分なものを削除し、「.」および「..」を(可能な限り)解決したpath を返します。この関数は、QDir::cleanPath をラップしたものです。

この関数は Qt 5.0 で導入されました。

absolute_path()、relative_path()、shell_path()、system_path() も参照してください。

dirname(file)

指定されたファイルのディレクトリ名部分を返します。例:

FILE = /etc/X11R6/XF86Config
DIRNAME = $$dirname(FILE) #/etc/X11R6

enumerate_vars

定義済みの変数名のリストを返します。

この関数は Qt 5.0 で導入されました。

escape_expand(arg1 [, arg2 ..., argn])

任意の数の引数を受け取ります。各引数に対して、エスケープシーケンス\n 、\r 、\t を展開し、引数をリストとして返します。

注: 展開する文字列をリテラルで指定する場合は 、以下のコードスニペットに示すように、バックスラッシュをエスケープする必要があります:

message("First line$$escape_expand(\\n)Second line")

find(variablename, substr)

variablename 内の値のうち、正規表現substr に一致するものをすべて返します。

MY_VAR = one two three four
MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive
MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)

MY_VAR2 には「-Lone -Ltwo -Lthree -Lfour -Lfive」が、MY_VAR3 には「three two three」が格納されます。

files(pattern[, recursive=false])

指定されたワイルドカードパターンを展開し、ファイル名のリストを返します。recursive が true の場合、この関数はサブディレクトリを再帰的に探索します。

first(変数名)

variablename の最初の値を返します。

たとえば、次の呼び出しでは `firstname` が返されます:

CONTACT = firstname middlename surname phone
message($$first(CONTACT))

take_first()、last() も参照してください。

format_number(number[, options...])

options で指定された形式でnumber を返します。以下のオプションを指定できます:

  • ibase=n 入力の基数をn
  • obase=n 出力の基数をn
  • width=n 出力の最小幅をn に設定します。出力がwidth より短い場合、スペースで埋められます
  • zeropad 出力をスペースの代わりにゼロで埋めます
  • padsign 出力の正の値の先頭にスペースを付加します
  • alwayssign 出力の正の値の先頭にプラス記号を付加します
  • leftalign 出力の値の右側にパディングを配置します

現在、浮動小数点数はサポートされていません。

たとえば、次の呼び出しでは、16進数のBAD が002989 に変換されます:

message($$format_number(BAD, ibase=16 width=6 zeropad))

この関数は Qt 5.0 で導入されました。

fromfile(filename, variablename)

filename を qmake プロジェクトファイルとして評価し、variablename に割り当てられた値を返します。

infile() も参照してください。

getenv(variablename)

環境変数variablename の値を返します。これは、ほとんどの場合、$$(variablename) という構文と同等です。ただし、getenv 関数は、名前に括弧を含む環境変数もサポートしています。

この関数は Qt 5.12 で導入されました。

join(variablename, glue, before, after)

variablename の値とglue を結合します。この値が空でない場合、この関数は値の先頭にbefore を、末尾にafter を付加します。variablename のみが必須の引数であり、その他の引数はデフォルトで空の文字列となります。glue 、before 、またはafter 内のスペースをエンコードする必要がある場合は、それらを引用符で囲む必要があります。

last(変数名)

variablename の最後の値を返します。

たとえば、次の呼び出しではphone を返します:

CONTACT = firstname middlename surname phone
message($$last(CONTACT))

take_last()、first() も参照してください。

list(arg1 [, arg2 ..., argn])

任意の数の引数を受け取ります。引数のリストを含む一意の名前を持つ変数を作成し、その変数の名前を返します。この変数を使用することで、以下のコードスニペットに示すようにループを記述できます

for(var, $$list(foo bar baz)) {
    ...
}

次のように書くことができます:

values = foo bar baz
for(var, values) {
    ...
}

lower(arg1 [, arg2 ..., argn])

任意の数の引数を受け取り、それらを小文字に変換します。

upper() も参照してください。

member(variablename [, start [, end]])

variablename のリスト値のうち、start からend までの(両端を含む)ゼロベースの要素インデックスを持つスライスを返します。

start が指定されていない場合、デフォルトは 0 になります。この使い方は$$first(variablename) と同等です。

end が指定されていない場合、デフォルトはstart となります。この使い方は、正確に1つの要素が返されるため、単純な配列のインデックス指定を表します。

また、2つのピリオドで区切って、開始位置と終了位置を1つの引数で指定することも可能です。

負の数はリストの末尾から数えたインデックスを表し、-1 は最後の要素となります。

いずれかのインデックスが範囲外の場合、空のリストが返されます。

end がstart より小さい場合、要素は逆順で返されます。

注: 終了インデックスは 範囲内に含まれ、順序も問われないため 、インデックスが無効な場合(入力変数が空であることで示唆される)にのみ、空のリストが返されます。

str_member() も参照してください。

num_add(arg1 [, arg2 ..., argn])

任意の数の数値引数を受け取り、それらを足し合わせて、その和を返します。

数値の先頭にマイナス記号を付けるだけで負の数にできるため、減算も暗黙的にサポートされています。

sum = $$num_add($$first, -$$second)

オペランドがすでに負の値である可能性がある場合は、数値を正規化するために追加の手順が必要になります:

second_neg = -$$second
second_neg ~= s/^--//
sum = $$num_add($$first, $$second_neg)

この関数は Qt 5.8 で導入されました。

prompt(question [, decorate])

指定されたquestion を表示し、stdinから読み取った値を返します。

decorate がtrue(デフォルト)の場合、質問にはプロンプトであることを示す汎用的な接頭辞と接尾辞が付与されます。

quote(string)

string 全体を単一のエンティティに変換し、その結果を返します。これは、文字列を二重引用符で囲むという、単なる凝った表現に過ぎません。

re_escape(string)

すべての特殊な正規表現文字にバックスラッシュを付けてエスケープしたstring を返します。この関数は、QRegularExpression::escape をラップしたものです。

read_registry(tree, key[, flag])

ツリーtree 内のレジストリキーkey の値を返します。

サポートされているツリーは、HKEY_CURRENT_USER (HKCU) およびHKEY_LOCAL_MACHINE (HKLM) のみです。

flag は、WOW64_32KEY (32) またはWOW64_64KEY (64) のいずれかになります。

注:この関数は Windows ホストでのみ利用可能です。

この関数は Qt 5.12.1 で導入されました。

relative_path(filePath[, base])

base に対するfilePath へのパスを返します。

base が指定されていない場合は、現在のプロジェクトディレクトリとなります。相対パスである場合は、使用前に現在のプロジェクトディレクトリを基準として解決されます。

filePath が相対パスである場合、まずベースディレクトリを基準に解決されます。その場合、この関数は実質的に $$clean_path() として機能します。

この関数は Qt 5.0 で導入されました。

absolute_path()、clean_path() も参照してください。

replace(string, old_string, new_string)

string として渡された変数の内容において、old_string の各出現箇所をnew_string に置換します。たとえば、次のコード

MESSAGE = This is a tent.
message($$replace(MESSAGE, tent, test))

次のメッセージを出力します:

This is a test.

resolve_depends(variablename, prefix)

これは内部関数であり、通常は使用する必要はありません。

この関数は Qt 5.0 で導入されました。

reverse(variablename)

variablename の値を逆順で返します。

この関数は Qt 5.0 で導入されました。

section(variablename, separator, begin, end)

variablename の値の一部を返します。この関数は、QString::section をラップしたものです。

たとえば、次の呼び出しではsurname が出力されます:

CONTACT = firstname:middlename:surname:phone
message($$section(CONTACT, :, 2, 2))

shadowed(path)

プロジェクトのソースディレクトリからビルドディレクトリへのパスをマッピングします。この関数は、ソース内ビルドの場合、path を返します。path がソースツリーの外を指している場合は、空の文字列を返します。

この関数は Qt 5.0 で導入されました。

shell_path(path)

path 内のすべてのディレクトリ区切り文字を、プロジェクトのビルド時に使用されるシェル(つまり、make ツールによって呼び出されるシェル)と互換性のある区切り文字に変換します。たとえば、Windows シェルが使用される場合、スラッシュはバックスラッシュに変換されます。

この関数は Qt 5.0 で導入されました。

system_path() も参照してください。

shell_quote(arg)

プロジェクトのビルド時に使用されるシェルに合わせて、arg を引用符で囲みます。

この関数は Qt 5.0 で導入されました。

system_quote() も参照してください。

size(変数名)

variablename の値の数を返します。

str_size() も参照してください。

sort_depends(variablename, prefix)

これは内部関数であり、通常は使用する必要はありません。

この関数は Qt 5.0 で導入されました。

sorted(variablename)

variablename 内の値のリストを、エントリが ASCII 順で昇順にソートされた状態で返します。

format_number()関数を使用して、値を固定長になるよう先頭に 0 を埋めることで、数値のソートを行うことができます。

この関数は Qt 5.8 で導入されました。

split(variablename, separator)

variablename の値を個別の値に分割し、それらをリストとして返します。この関数は、QString::split をラップしたものです。

例:

CONTACT = firstname:middlename:surname:phone
message($$split(CONTACT, :))

sprintf(string, arguments...)

string 内の %1~%9 を、関数arguments にコンマ区切りの引数リストとして渡された引数で置換し、処理後の文字列を返します。

str_member(arg [, start [, end]])

この関数はmember() と同一ですが、リスト変数ではなく文字列値を操作する点、そしてその結果としてインデックスが文字位置を指す点が異なります。

この関数を使用すると、多くの一般的な文字列のスライシング操作を実装できます:

# $$left(VAR, len)
left = $$str_member(VAR, 0, $$num_add($$len, -1))

# $$right(VAR, len)
right = $$str_member(VAR, -$$num, -1)

# $$mid(VAR, off, len)
mid = $$str_member(VAR, $$off, $$num_add($$off, $$len, -1))

# $$mid(VAR, off)
mid = $$str_member(VAR, $$off, -1)

# $$reverse(VAR)
reverse = $$str_member(VAR, -1, 0)

注: これらの実装では 、引数len がゼロの場合を別途処理する必要があります。

member()、num_add() も参照してください。

この関数は Qt 5.8 で導入されました。

str_size(arg)

引数の文字数を返します。

size() も参照してください。

この関数は Qt 5.8 で導入されました。

system(command[, mode[, stsvar]])

system 関数のこのバリエーションを使用すると、コマンドからのstdoutを取得し、それを変数に代入することができます。

例:

UNAME = $$system(uname -s)
contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me )

$$cat()と同様に、mode の引数には、blob 、lines 、true 、およびfalse を値として指定できます。ただし、従来の単語分割ルール(すなわち、空またはtrue 、およびfalse )は、わずかに異なります。

stsvar を指定すると、コマンドの終了ステータスがその変数に格納されます。コマンドがクラッシュした場合はステータスは-1となり、それ以外の場合はコマンドが選択した非負の終了コードとなります。通常、ステータスをゼロ(成功)と比較するだけで十分です。

system() の test バリアントも参照してください。

system_path(path)

path 内のすべてのディレクトリ区切り文字を、system() 関数がコマンドを呼び出す際に使用するシェルと互換性のある区切り文字に変換します。たとえば、Windowsシェルの場合は、スラッシュがバックスラッシュに変換されます。

この関数は Qt 5.0 で導入されました。

shell_path() も参照してください。

system_quote(arg)

`arg ` を、system() 関数がコマンドの呼び出しに使用するシェル向けにエスケープ処理します。

この関数は Qt 5.0 で導入されました。

shell_quote() も参照してください。

take_first(variablename)

variablename の最初の値を返し、それをソース変数から削除します。

これは、たとえばキューの実装などに便利です。

この関数は Qt 5.8 で導入されました。

take_last()、first() も参照してください。

take_last(variablename)

variablename の最後の値を返し、それをソース変数から削除します。

これにより、たとえばスタックを実装する際に便利です。

この関数は Qt 5.8 で導入されました。

take_first()、last() も参照してください。

unique(変数名)

variablename 内の値のリストから、重複するエントリを削除して返します。例:

ARGS = 1 2 3 2 5 1
ARGS = $$unique(ARGS) #1 2 3 5

upper(arg1 [, arg2 ..., argn])

任意の数の引数を受け取り、それらを大文字に変換します。

lower() も参照してください。

val_escape(変数名)

variablename の値を、qmake コードとして解析できるようにエスケープします。

この関数は Qt 5.0 で導入されました。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.