Aus dem Wiki:
CMAKE_CURRENT_SOURCE_DIR Dies ist das Verzeichnis, in dem sich die aktuell verarbeitete CMakeLists.txt befindet
CMAKE_CURRENT_LIST_DIR (seit 2.8.3) Dies ist das Verzeichnis der aktuell verarbeiteten Listendatei.
Aus den Dokumenten:
CMAKE_CURRENT_SOURCE_DIR: Der Pfad zum Quellverzeichnis, das gerade verarbeitet wird. Dies ist der vollständige Pfad zum Quellverzeichnis, das derzeit von cmake verarbeitet wird.
CMAKE_CURRENT_LIST_DIR: Vollständiges Verzeichnis der aktuell verarbeiteten Listendatei. Während CMake die Listendateien in Ihrem Projekt verarbeitet, wird diese Variable immer auf das Verzeichnis gesetzt, in dem sich die aktuell verarbeitete Listendatei (CMAKE_CURRENT_LIST_FILE) befindet. Der Wert hat einen dynamischen Bereich. Wenn CMake mit der Verarbeitung von Befehlen in einer Quelldatei beginnt, wird diese Variable auf das Verzeichnis gesetzt, in dem sich diese Datei befindet. Wenn CMake die Verarbeitung von Befehlen aus der Datei beendet hat, wird der vorherige Wert wiederhergestellt. Daher ist der Wert der Variablen in einem Makro oder einer Funktion das Verzeichnis der Datei, die den untersten Eintrag im Aufrufstapel aufruft, nicht das Verzeichnis der Datei, die die Makro- oder Funktionsdefinition enthält.
Unter welchen Umständen würden diese Variablen unterschiedliche Werte haben?
./
?Antworten:
Die Variablen
CMAKE_CURRENT_SOURCE_DIR
undCMAKE_CURRENT_LIST_DIR
können auf verschiedene Verzeichnisse für eine CMake-Listendatei verweisen, die von einer anderen Datei mit dem Befehl include enthalten ist . Zum Beispiel, wenn aCMakeLists.txt
in einem Verzeichnis vorhanden istproject
und die folgende Anweisung enthältdann wird während
src/CMakeLists.txt
der VerarbeitungCMAKE_CURRENT_LIST_DIR
auf verwiesen,project/src
währendCMAKE_CURRENT_SOURCE_DIR
immer noch auf das äußere Verzeichnis verweistproject
.CMAKE_CURRENT_LIST_DIR
Dies ist praktisch, wenn Sie Ressourcendateien wie Vorlagendateien oder Batch-Skripte suchen müssen, die sich neben derCMakeLists.txt
aktuell verarbeiteten Datei befinden.quelle
CMAKE_CURRENT_LIST_DIR
Änderungen einfach mit jeder Datei hinzufügen, die Sieinclude()
; es muss nicht aufgerufen werdenCMakeLists.txt
.CMAKE_CURRENT_LIST_DIR
undinclude(...)
in Ihren Projekten.CMAKE_CURRENT_SOURCE_DIR
es ähnlicher istCMAKE_SOURCE_DIR
als in den Dokumenten angegeben.add_subdirectory()
? Zeigen beide Variablen auf den Ordner?