2017-09-01 5 views
0

私は設定が{"VulkanDebug", "VulkanRelease", "OpenGLDebug", "OpenGLRelease"}の事前作成メークファイルプロジェクトを使用しており、DEBUG/RELEASEVULKAN/OPENGLのトークンをbuildCommandsのスクリプトに渡したいとします。premakeでビルドコマンドに追加する

たとえば、構成がVulkanReleaseの場合、ビルドコマンドはscript.bat VULKAN RELEASEであり、スクリプトはこれらのトークンの処理を決定します。

私の理想的なソリューションは、(無効なロジックを使用して)です:script.batVULKAN、およびRELEASE:私は通常の方法buildcommandsを使用する場合は

buildcommands { "script.bat" } 

    filter "configurations:*Vulkan*" 
     buildcommands.append(" VULKAN") 
     rebuildcommands.append(" VULKAN") 

    filter "configurations:*OpenGL*" 
     buildcommands.append(" OPENGL") 
     rebuildcommands.append(" OPENGL") 

    filter "configurations:*Debug*" 
     buildcommands.append(" DEBUG") 
     rebuildcommands.append(" DEBUG") 

    filter "configurations:*Release*" 
     buildcommands.append(" RELEASE") 
     rebuildcommands.append(" RELEASE") 

、Visual Studioは、3つの別々に実行するコマンドとさせて頂きます。

私はいくつかの回避策がありますが、それらはすべて私に醜いと感じます。まず、構成名全体を引数としてスクリプトに渡し、そこで解析します。本当にそれをまとめる議論のファンではありません。 2番目は、premakeスクリプトのコマンドライン引数をVULKANまたはOPENGLに作成し、設定としてDEBUGRELEASEしか持たないことです。私が知っている限り、これは残虐なようなVulkanとOpenGLのための別々のプロジェクトファイルを生成します。最後に、各構成に対して完全なビルドコマンドを提供することができました。この3番目のオプションは一番いいようですが、より多くの設定(とすべての可能な順列)を追加するとスクリプトが長くなります。

したがって、premakeに追加のサポートがあり、私がそれについて知りませんでしたら、問題ありません!さもなければ私が知らないこれを行うもっとクリーンな方法があるかもしれません。読んでくれてありがとう。

答えて

0

おそらく、今現在使用できる最もクリーンなアプローチは、プロジェクトスクリプトにヘルパー機能を提供し、インライントークンから呼び出すことでしょう。おそらく次のようなものでしょう:

-- Helper function to assemble the arguments 
function buildArguments(cfg) 
    local args = {} 

    if cfg.name:find("VULKAN") then 
     table.insert(args, "VULKAN") 
    end 

    if cfg.name:find("OpenGL") then 
     table.insert(args, "OPENGL") 
    end 

    if cfg.name:find("Debug") then 
     table.insert(args, "DEBUG") 
    end 

    if cfg.name:find("Release") then 
     table.insert(args, "RELEASE") 
    end 

    return table.concat(args, " ") 
end 

-- Use it like this 
buildcommands "SomeCmd.exe %{buildArguments(cfg)}" 
関連する問題