Wie vorangestellt wird ${CMAKE_CURRENT_SOURCE_DIR} um alle Dateien in der variable?
Habe ich Projekt mit Unterverzeichnissen, und ich möchte zu halten, Liste von Quellen aus jedes Verzeichnis getrennt.
Habe ich:
SET( SUBDIR_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
${CMAKE_CURRENT_SOURCE_DIR}/c.cpp
PARENT_SCOPE
)
Möchte ich haben:
SET( SUBDIR_SOURCES
a.cpp
b.cpp
c.cpp
PARENT_SCOPE
)
some_magic_fuction( SUBDIR_SOURCES ${CMAKE_CURRENT_SOURCE_DIR} )
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich in der Regel schreiben Sie eine kleine
CMakeLists.txt
für jedes Unterverzeichnis, das compiliert alle Dateien, die dir in einer Bibliothek.In das übergeordnete Verzeichnis
CMakeLists.txt
füge ich jeweils das Unterverzeichnis mitadd_subdirectory( blah )
.Wenn Sie muss haben eine variable angegeben, die folgenden arbeiten sollten (beachten Sie, ich habe nicht wirklich getestet):
Nennen es so:
Für
some_magic_function
übergeben werden, die Liste der Quellen, Erstens müssten Sie zu vermeiden, Ihnen inPARENT_SCOPE
da Sie nicht in den Anwendungsbereich der subdir ' s CMakeList.Sie würde auch nicht übergeben zu müssen, die
${CMAKE_CURRENT_SOURCE_DIR}
auf die Funktion, da es verfügbar sein wird, innerhalb der Funktion, unabhängig davon, wo die Funktion definiert ist.So könnte man etwas machen wie:
- und die Funktion könnte sein:
Innerhalb der Funktion
${SOURCE_FILES}
istSUBDIR_SOURCES
, so müssen wir mit${${SOURCE_FILES}}
um die tatsächliche Datei-Liste.Funktionen haben Ihren eigenen Bereich, also da wir möchten, ersetzen Sie den Wert von
SUBDIR_SOURCES
im Gültigkeitsbereich außerhalb der Funktion, müssen wir mitPARENT_SCOPE
beim AufrufSET( ${SOURCE_FILES}...
Für weitere Informationen über diese Befehle ausführen:
Ich normalerweise auch lieber Funktionen mit Ihren eigenen Gültigkeitsbereich von lokalen Variablen, aber in deinem Fall würde ich vorschlagen, schreiben Sie Ihre eigenen makro-Befehl.
So dass die Einnahme von Fraser ' s code würde dies wie folgt Aussehen:
Oder auch mit relativen Pfaden:
Und rufen:
Ihre Eltern
CMakeLists.txt
hat eh zu wissen, dieSUBDIR_SOURCES
variable. Und dies hätte auch den Vorteil, dass Sie rufen Sie es mehrfach in den Unterverzeichnissen istCMakeLists.txt
.Aber brauchen Sie wirklich eine
CMakeLists.txt
in einem Unterverzeichnis, das nicht zu definieren, Ihre eigenen Ziel in Erster Linie? Ich möchte nur hinzufügen, die Quellen zu Ihren übergeordneten VerzeichnissenCMakeLists.txt
:Siehe auch CMakeLists.txt Dateien für mehrere Bibliotheken und ausführbaren Dateien