私のPremake5スクリプトでは、現在の設定に応じてboostライブラリの名前を返す関数を実装しています(デバッグ設定の場合は-gd
、マルチスレッドの場合は-mt
などがあります)。明らかに間違っているpremake5で現在の状態を取得する方法は?
name = "boost_" .. name
...
filter "configurations:Debug*"
name = name .. "-gd"
...
links { name }
:私の最初の試みで、私はこれを得た私たちは、デバッグコンフィギュレーションを評価したりしていないかどうか-gd
が名前に追加されます。何かに似て:
name = "boost_" .. name
...
if (CONFIGURATION.MATCHES_FILTER("Debug*"))
name = name .. "-gd"
...
links { name }
はそれを動作させるだろうが、私は簡単に現在の設定にアクセスする手段を見つけることができません。 configuration().current
がありますが、これは文書化されておらず、「実行する方法」ではないようですので、将来のpremakeリリースでは動作しなくなる可能性があります。
:
name = "boost_" .. name
...
filter "configurations:Debug*"
links { name .. "-gd" }
filter "configurations:Release*"
links { name }
が、名前だけで「フィルタ」を介してアクセス可能な複数の変数を含めることができれば、このアプローチは、それが問題になるだろう。
現在のプレマイク状態に標準(つまりハッキーではない)方法でアクセスすることは可能ですか?あるいは後者(より宣言的な、私は推測する)方法が好まれますか?明確にするため
EDIT:
主な質問は:それは "LUAに"(例えば、現在の設定名)premakeの状態を使用することが可能である(例えば
if
式で) ?私。私は仕事以下のコードを作るためにEXPRESSION_HERE
として置けばいい:if (EXPRESSION_HERE) then print("Executed only in Debug* configurations"); end
理由:
Boostライブラリは、彼らが構築された構成に応じて、異なる名前が付けられています。さらに、それらはWindowsとLinuxで異なる名前を持っています。
boost_atomic-vc141-mt-1_64.lib
はlibboost_prg_exec_monitor-vc141-mt-gd-1_64.lib
はブースト1.64静的libに、からVisual Studioに1.41ツールセットを構築し、マルチスレッド、デバッグシンボルでPrgExecMonitorを後押しで、ブースト1.64 DLLの
libboostt_prg_exec_monitor-mt-gd.lib
は、Linux(AFAIR)の下で上記と同じになり
.lib
仲間からのVisual Studio 1.41ツールセットで構築されたマルチスレッドでアトミックブーストです私はシリーズとして、最終的なライブラリ名を構築するため
それは自然な感じ特定の状況下で名前に追加されました(例:if
)。デバッグシンボルが必要な場合は-gd
を追加してください)。私はこれがトークンを使用して可能であり、filter
の下で文字列連結経由で知っているが、それは唯一の方法ですか?それが最善の方法なら、なぜですか?
ご回答いただきありがとうございます。私は元の質問を明確にしようとしました。 – mikosz
構成名トークンで自分の回答を更新しました。 – starkos
ありがとうございますが、それでも私の質問には答えません。私は理解し、提示された場合、実際にトークンを使用することができますが、すべての状況で使用することはできません。私の質問は、preake状態をluaにすることです。現在の設定名や現在のプロジェクトの出力ファイルのパスなどを含む文字列が必要なので、lua関数を呼び出すことができます(os.copyfileなど)。場合によっては、グローバル変数(_OS、_OPTIONS、_WORKING_DIR)を使用することもできますが、それらの変数は不十分です。 – mikosz