2017-07-16 39 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,但它沒有記錄,似乎不是「應該完成的方式」,因此可能會在未來的預發佈​​版本中停止工作。

我可以這樣做:

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是升壓原子與Visual Studio的1.41工具集構建與Boost 1.64 DLL的.lib伴侶多線程,
  • libboost_prg_exec_monitor-vc141-mt-gd-1_64.lib是升壓PrgExecMonitor與升壓1.64靜態庫,
  • 與Visual Studio內置1.41工具集多線程和調試符號
  • libboostt_prg_exec_monitor-mt-gd.lib將是相同的Linux之上(AFAIR)下

感覺自然對我來說,構建最終庫的名稱作爲系列的if s在特定情況下(例如如果我們需要調試符號,則添加-gd)。我知道這是可能的使用令牌和通過字符串連接filter下,但它是唯一的方法?如果這是最好的方法,那爲什麼?

回答

1

Tokens是應用這種邏輯的方式。

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

至於您的評論:

我想包含當前配置的名稱,或當前項目的輸出文件的路徑等,這樣我可以再調用它一個Lua函數的字符串(如OS .copyfile)

這是不可能的,因爲在腳本運行時沒有「當前」配置。這隻有在您的腳本完成並且正在生成目標文件後才能實現。

我會嘗試放在一起的例子,但複製文件,你要看看postbuildcommandscommand tokens

+0

感謝您的回覆,我試圖澄清我原來的問題。 – mikosz

+0

我用配置名稱令牌更新了我的答案。 – starkos

+0

謝謝,但那仍然不能回答我的問題。我明白,並在提出的情況下,確實可以使用令牌,但不是在所有情況下。我的問題是關於把預製狀態變成lua。我想要一個包含當前配置名稱或當前項目的輸出文件路徑等的字符串,以便我可以用它調用一個lua函數(例如os.copyfile)。在某些情況下,我可以使用全局變量(_OS,_OPTIONS,_WORKING_DIR),但沒有足夠的。 – mikosz

相關問題