置換関数
qmakeには、設定中に変数の内容を処理する関数が用意されています。これらの関数はreplace 関数と呼ばれます。通常、これらの関数は他の変数に代入できる値を返します。これらの値を得るには、関数の前に$$
演算子をつけます。置換関数は組み込み関数と関数ライブラリに分けられます。
テスト関数」も参照してください。
組み込み置換関数
基本的な置換関数は組み込み関数として実装されています。
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
(デフォルト値) および は、ファイルの内容を、qmake の値リスト分割ルール (変数割り当ての場合と同様) に従って分割された個別の値として返します。 が の場合、改行文字だけを含む値は、ファイルのどこで改行されたかを示すためにリストに挿入される。false
mode
false
clean_path(path)
ディレクトリ区切り文字を正規化("/"に変換)し、冗長なものを削除し、". "と".. "を(可能な限り)解決して、path
。この関数はQDir::cleanPath のラッパーです。
この関数はQt 5.0で導入されました。
absolute_path(),relative_path(),shell_path(),system_path() も参照してください。
ディレクトリ名(ファイル)
指定されたファイルのディレクトリ名部分を返す。例えば
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)
正規表現substr
にマッチするvariablename
の全ての値を返します。
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'を含む。
ファイル(pattern[, recursive=false])
指定されたワイルドカードパターンを展開し、ファイル名のリストを返す。recursive
が真の場合、この関数はサブディレクトリに降下します。
first(variablename)
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
を 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)
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]])
start
からend
(を含む)の間のゼロベースの要素インデックスを持つvariablename
のリスト値のスライスを返します。
start
が与えられない場合、デフォルトはゼロです。この用法は$$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
を表示し、標準入力から読み込んだ値を返します。
decorate
が真(デフォルト)の場合、質問はプロンプトであることを示す一般的な接頭辞と接尾辞を得ます。
quote(string)
string
全体を1つのエンティティに変換し、その結果を返します。これは単に文字列を二重引用符で囲むという洒落た方法です。
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で導入されました。
この関数は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)
variablename
の値の数を返します。
str_size() も参照してください。
sort_depends(variablename, prefix)
これは内部関数で、通常は必要ありません。
この関数は Qt 5.0 で導入されました。
sorted(variablename)
variablename
の値のリストを、ASCII の昇順でソートして返します。
数値のソートは、format_number()関数の助けを借りて、固定長に値をゼロパディングすることによって達成することができます。
この関数はQt 5.8で導入されました。
split(variablename, separator)
variablename
の値を別々の値に分割し、リストとして返します。この関数はQString::split のラッパーです。
例えば
CONTACT = firstname:middlename:surname:phone message($$split(CONTACT, :))
sprintf(文字列, 引数...)
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
を別途処理する必要がある。
この関数は Qt 5.8 で導入されました。
str_size(arg)
引数の文字数を返します。
size() も参照してください。
この関数は Qt 5.8 で導入されました。
system(コマンド[, モード[, stsvar]])
このsystem
関数の変種を使って、コマンドから標準出力を取得し、それを変数に代入することができます。
例えば、以下のようになります:
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)
system()
関数で使われるシェルのarg
を引用します。
この関数は Qt 5.0 で導入されました。
shell_quote() も参照してください。
take_first(variablename)
variablename
の最初の値を返し、ソース変数から削除します。
これはキューを実装するときなどに便利です。
この関数は Qt 5.8 で導入されました。
take_last(),first() も参照してください。
take_last(変数名)
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 コードとして解析できるようにvariablename
の値をエスケープします。
この関数は Qt 5.0 で導入されました。
©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。