2017-07-16 3 views
0

私の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:

  1. 主な質問は:それは "LUAに"(例えば、現在の設定名)premakeの状態を使用することが可能である(例えばif式で) ?私。私は仕事以下のコードを作るためにEXPRESSION_HEREとして置けばいい:

    if (EXPRESSION_HERE) then 
        print("Executed only in Debug* configurations"); 
    end 
    
  2. 理由:

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の .lib仲間からのVisual Studio 1.41ツールセットで構築されたマルチスレッドでアトミックブーストです私はシリーズとして、最終的なライブラリ名を構築するため
  • libboostt_prg_exec_monitor-mt-gd.libは、Linux(AFAIR)の下で上記と同じになり

それは自然な感じ特定の状況下で名前に追加されました(例:if)。デバッグシンボルが必要な場合は-gdを追加してください)。私はこれがトークンを使用して可能であり、filterの下で文字列連結経由で知っているが、それは唯一の方法ですか?それが最善の方法なら、なぜですか?

答えて

1

Tokensは、この種のロジックを適用する方法です。あなたのコメントに関しては

filter "configurations:Debug*" 
    links { "boost_%{cfg.name}-gd" } 

私は現在のコンフィギュレーション名、またはなど、私はそれでLuaの関数を呼び出すことができるように、現在のプロジェクトの出力ファイルのパスを含む文字列をしたい(例えばOS .copyfile)

スクリプトが実行されている間、「現在の」構成は存在しないため、これは不可能です。これは、スクリプトが完了し、ターゲットファイルが生成された後にのみ可能になります。

例をまとめようとしますが、ファイルをコピーするには、postbuildcommandscommand tokensを見てください。

+0

ご回答いただきありがとうございます。私は元の質問を明確にしようとしました。 – mikosz

+0

構成名トークンで自分の回答を更新しました。 – starkos

+0

ありがとうございますが、それでも私の質問には答えません。私は理解し、提示された場合、実際にトークンを使用することができますが、すべての状況で使用することはできません。私の質問は、preake状態をluaにすることです。現在の設定名や現在のプロジェクトの出力ファイルのパスなどを含む文字列が必要なので、lua関数を呼び出すことができます(os.copyfileなど)。場合によっては、グローバル変数(_OS、_OPTIONS、_WORKING_DIR)を使用することもできますが、それらの変数は不十分です。 – mikosz

関連する問題