2016-04-19 12 views
1

Ich versuche, den Inklusion Weg einer Reihe von addsubdirectories abzufragen():Cmake: Lesen Sie Variablen aus einem anderen (verarbeitet) Verzeichnis

-projectA 
    -projectB 
     -projectC 

In dieser Konfiguration wird projectA Hinzufügen ProjectB als ein Unterverzeichnis der wiederum fügt ProjectC als Unterverzeichnis hinzu. Ich möchte projectC über die Hierarchie wissen lassen. Ich kann dies durch rekursive Aufrufe erreichen

get_directory_property(parent DIRECTORY ${cur_dir} PARENT_DIRECTORY) 

, die nichts zurück, wenn es projectA erreicht. Das macht es fast. Es wäre aber nett, wenn ich die ${PROJECT_NAME} von diesen Verzeichnissen lesen und A-B-C anstelle von projectA-projectB-projectC zurückgeben könnte.

Meine Frage ist also: Gibt es eine Möglichkeit, die Variablen aus einem Verzeichnis zu lesen, das bereits geparst ist?

Beachten Sie, dass in diesem Fall projectC Variablen von seinem übergeordneten erben, aber die Standard-Cache-Variablen in den untergeordneten Projekten ersetzt werden, weshalb ich sie nicht verwenden kann.

+0

Könnte [ 'LISTFILE_STACK'] (https://cmake.org/cmake/help/v3.3/prop_dir /LISTFILE_STACK.html) kann hier etwas nützen? Oder Sie könnten Ihren eigenen 'my_add_subdirectory()' erstellen, der den Stack in benutzerdefinierten Verzeichniseigenschaften von 'PROJECT_NAME' erstellt. Und habe ich richtig verstanden, dass alle (Unter-) Ordner einen 'project()' Befehl haben? – Florian

+0

ja alle haben Projekt(). Ich komme jedoch zu der Schlussfolgerung, dass auf dieselbe Weise installierte Projekte Konfigurationsdateien haben können, ich kann eine mit 'configure_file' erzeugen lassen und sie im Quellordner als Kopf- oder Projektdatei speichern. damit ich das Verzeichnis gefunden habe, würde ich einfach seine Projektdatei hinzufügen. Ich denke, es ist viel sauberer als alles andere, was ich tun könnte. – ShS

+0

Ok, aber wie dies eingerichtet wird ist höchstwahrscheinlich eine andere Frage (siehe zB meine [hier] (http://stackoverflow.com/questions/31512485/cmake-how-to-setup-source-library-and-cmakelists-txt) Abhängigkeiten)). Wenn Sie die Hauptfrage, die Sie hier gestellt haben, beantworten, können Sie die Eigenschaft "VARIABLES" (https://cmake.org/cmake/help/v3.3/prop_dir/VARIABLES.html) für ein bestimmtes bereits analysiertes Verzeichnis lesen . – Florian

Antwort

0

Sie tun können:

get_directory_property(output DIRECTORY dir/path DEFINITION PROJECT_NAME) 

oder eine normale Variable:

get_directory_property(output DIRECTORY dir/path DEFINITION myVariable) 
Verwandte Themen