2017-05-16 1 views
1

Ich versuche, eine benutzerdefinierte Qmake „Ersetzen-Funktion“ zu erstellen, die im Grunde ein paar Sachen zu den INCLUDEPATH Variablen anhängt wie so:Wie variabel ändern aus Qmake ersetzen Funktion

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

Jedoch, wenn ich diese laufen Funktion mit einem Parameter und dann ausdrucken INCLUDEPATH Variablen wie folgt aus:

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

ich folgendes im Protokoll erhalten:

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

Dies zeigt an, dass die Funktion funktioniert, aber die an der Variablen INCLUDEPATH vorgenommenen Änderungen werden nicht beibehalten.

Ich möchte wissen, wie ich das Verhalten erhalten kann, das ich erwartet habe (INCLUDEPATH behält die Änderungen bei, die ich gemacht habe, nachdem ich meine Funktion ausgeführt habe). Wie kann ich das tun?

Antwort

2

Sie müssen einen Anruf zu export hinzufügen. Vom qmake manual:

Export (Variablenname)

Exportiert den aktuellen Wert des Variablennamen aus dem lokalen Kontext einer Funktion> zu dem globalen Kontext

So soll Ihr Code seine

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

    export(INCLUDEPATH)       # <-- This is new 

    return (true) 
} 
Verwandte Themen