2015-08-15 14 views
21

This page enthält eine gute Zusammenfassung der Variablen CMake bereits für uns definiert. Ich finde, dass einige Variablen gleich sind. Nehmen Sie zum Beispiel das Beispiel CMAKE_SOURCE_DIR und PROJECT_SOURCE_DIR. Sie sind gleich und beziehen sich auf den Ordner, in dem die CMakeLists.txt der obersten Ebene definiert ist. Meine Frage ist also: Gibt es einen feinen Unterschied zwischen ihnen? Vielen Dank.Sind CMAKE_SOURCE_DIR und PROJECT_SOURCE_DIR in CMake gleich?

Antwort

34

Es ist eine Differenz zwischen diesen Variablen. CMAKE_SOURCE_DIR bezieht sich tatsächlich auf den Ordner, in dem die CMakeLists.txt auf oberster Ebene definiert ist. PROJECT_SOURCE_DIR verweist jedoch auf den Ordner der CmakeLists.txt, der den letzten project() Befehl enthält.

Angenommen, Sie haben ein Projekt der obersten Ebene mit der Bezeichnung Outer, das ein Unterverzeichnis mit einem eigenen Projekt namens Inner enthält. Outer 's CMakeLists.txt hat:

project(Outer) 
add_subdirectory(Inner) 

und Inner' s:

project(Inner) 

Dann in diesen beiden CMakeLists Dateien, CMAKE_SOURCE_DIR beziehen sich auf Outer ‚s Quelle Richt. Aber während PROJECT_SOURCE_DIR für Outer ist auch das gleiche dir, das ist nicht der Fall für Inner. Inner 's PROJECT_SOURCE_DIR ist das Unterverzeichnis, das seine CMakeLists.txt enthält.

Dieser Unterschied gilt für alle PROJECT_<var> vs CMAKE_<var> Variablen.

+4

Könnten Sie auch den Unterschied mit 'CMAKE_CURRENT_SOURCE_DIR' hinzufügen? – Svalorzen

Verwandte Themen