Wie setze ich die globale Variable in einer Funktion für cmake?

7

Ich schreibe eine CMakeLists.txt, um Dateien zu generieren und die generierten Dateien zu kompilieren. Ich erstelle eine Funktion, um einige Dateipfadzeichenfolgen zu einer globalen Listenvariablen hinzuzufügen.

Meine CMakeLists.txt:

%Vor%

Die cmake Ausgabe:

%Vor%

Jemand schlug vor, Makro statt Funktion zu verwenden, aber ich brauche lokale Variable, daher muss ich die Funktion anstelle von Makro verwenden.

Wie kann ich die globale Variable source_list in der Funktion test () richtig setzen? Kann es nicht einfach und normal machen?

    
sean 05.04.2012, 15:59
quelle

4 Antworten

11

Sie müssen set anstelle von list verwenden, um die Variable im übergeordneten Bereich zu beeinflussen.

Ersetzen Sie also Ihren list -Befehl durch:

%Vor%     
Fraser 05.04.2012, 16:25
quelle
12

PARENT_SCOPE ist nur für Eltern, es wird nicht funktionieren, wenn Sie andere Nicht-Eltern-Skript haben, die es auch sehen möchten.

Sie benötigen einen Cache für die wahre "global-like" Variable. In deinem Fall benutze:

%Vor%     
Ding-Yi Chen 05.08.2014 03:05
quelle
1

Ein anderer Ansatz besteht darin, globale Eigenschaften zu verwenden. Sobald Sie es eingestellt haben:

%Vor%

Sie können es von überall lesen:

%Vor%

Ich habe in Beispielen die verschiedenen Namen für die Eigenschaft ( source_list_property ) und für die Variable ( source_list ) verwendet. Vielleicht ist es besser, den gleichen Namen zu verwenden. Aber Punkt ist die Verwendung einer Eigenschaft als globale Variablen und nicht über die Benennung.

Solche globalen Eigenschaften befinden sich nicht im Cache.

    
Maxim Suslov 25.09.2017 19:54
quelle
0

Aufbauend auf Maxim Suslovs Antwort funktionierte der folgende Code für ein ähnliches Problem:

%Vor%

Die Funktion add_source kann von innerhalb eines beliebigen Unterverzeichnisses aufgerufen werden.

    
Marios V 29.11.2017 10:30
quelle

Tags und Links