2017-05-16 35 views
1

我試圖創建一個自定義QMAKE「替代函數」,基本上附加一些東西到INCLUDEPATH變量,像這樣:如何從QMAKE內改變變量替換功能

defineReplace(myFunc) { 
    lo=$$lower($$1) 
    INCLUDEPATH += /someDir/libs/lib$${lo} 
    message("| INCLUDEPATH A: " $${INCLUDEPATH}) 
    return (true) 
} 

然而,當我運行這個與參數和功能,然後打印出INCLUDEPATH變量是這樣的:

$$myFunc(whatever) 
message("| INCLUDEPATH B: " $${INCLUDEPATH}) 

我得到的日誌中的以下內容:

Project MESSAGE: | INCLUDEPATH A: /someDir/libs/libwhatever 
Project MESSAGE: | INCLUDEPATH B: 

這表明該函數可以正常工作,但不知如何對INCLUDEPATH變量所做的更改不會被保留。

我想知道如何獲得我期望的行爲(INCLUDEPATH在我運行我的功能後保留對其所做的更改)。 我該怎麼做?

回答

2

您需要添加一個電話到export。從qmake manual

出口(VARIABLENAME)

從函數的局部範圍內出口VARIABLENAME的當前值>全球範圍內

所以,你的代碼應該是

defineReplace(myFunc) { 
    lo=$$lower($$1) 
    INCLUDEPATH += /someDir/libs/lib$${lo} 
    message("| INCLUDEPATH A: " $${INCLUDEPATH}) 

    export(INCLUDEPATH)       # <-- This is new 

    return (true) 
}