Wie kann ich mit CMake Dateien erstellen und installieren?

8

Ich bin neu bei CMake und habe ein Problem, für das ich keine Lösung finden kann. Ich verwende CMake, um ein Projekt mit einer Reihe von optionalen Unterverzeichnissen zu kompilieren, und es erstellt gemeinsam genutzte Bibliotheksdateien wie erwartet. Dieser Teil scheint gut zu funktionieren. Jedes dieser Unterverzeichnissen enthält eine SQL-Datei. Ich muss alle ausgewählten SQL-Dateien zu einer SQL-Header-Datei concat und installieren Sie das Ergebnis. Also eine Datei wie:

%Vor%

Wenn ich das direkt in einer make-Datei mache, mache ich vielleicht so etwas wie das folgende, um nur mit den ausgewählten Unterverzeichnissen umzugehen:

%Vor%

Ich habe Teile davon herausgefunden, wie ich es benutzen kann:

%Vor%

Ich nehme an, ich kann in jeder der CMakeLists.txt-Unterordner meine Dateien ablegen, um die Dateinamen zu sammeln. Und ich kann ein Makro erstellen wie:

%Vor%

Aber ich bin verloren, wenn der CMake anfänglich ausgeführt wird und wenn es von der make-Installation ausgeführt wird. Vielleicht gibt es einen besseren Weg, dies zu tun. Ich brauche das für Windows und Linux.

Ich wäre glücklich mit einigen Hinweisen, um mich in die richtige Richtung zu weisen.

    
Stephen Woodbridge 07.03.2013, 21:49
quelle

1 Antwort

10

Sie können die verkettete Datei hauptsächlich mit CMakes file und function Befehle.

Erstellen Sie zuerst eine cat Funktion:

%Vor%

Wenn Sie die Liste der Eingabedateien in der Variablen PACKAGE_SQL_FILES haben, können Sie die Funktion wie folgt verwenden:

%Vor%

Der Grund für das Schreiben in ein temporäres Objekt ist, dass die eigentliche Zieldatei nur aktualisiert wird, wenn sich ihr Inhalt geändert hat. Siehe diese Antwort , warum das eine gute Sache ist.

Wenn Sie die Unterverzeichnisse über den Befehl add_subdirectory einschließen, sollten Sie beachten, dass die Unterverzeichnisse alle einen eigenen Gültigkeitsbereich haben, sofern es sich um CMake-Variablen handelt. In den Unterverzeichnissen wirkt sich die Verwendung von list nur auf Variablen im Bereich dieses Unterverzeichnisses aus.

Wenn Sie eine Liste im übergeordneten Bereich erstellen möchten, müssen Sie set(... PARENT_SCOPE) , zB

%Vor%

All dies hat bisher einfach die verkettete Datei im Stammverzeichnis Ihrer Build-Struktur erstellt. Um es zu installieren, möchten Sie wahrscheinlich den Befehl install(FILES ...) verwenden :

%Vor%

Wenn CMake ausgeführt wird (entweder weil Sie es manuell aufrufen oder weil es Änderungen erkennt, wenn Sie "make" ausführen), wird die verkettete Datei in der Build-Struktur aktualisiert. Nur wenn Sie "make install" ausführen, wird die Datei schließlich vom Build-Stammverzeichnis zum Installationsverzeichnis kopiert.

    
Fraser 07.03.2013, 22:33
quelle

Tags und Links