Datei¶

Dateimanipulationsbefehl.

file(WRITE filename "message to write"... )file(APPEND filename "message to write"... )file(READ filename variable )file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filename variable)file(STRINGS filename variable )file(GLOB variable ...)file(GLOB_RECURSE variable ...)file(RENAME <oldname> <newname>)file(REMOVE )file(REMOVE_RECURSE )file(MAKE_DIRECTORY )file(RELATIVE_PATH variable directory file)file(TO_CMAKE_PATH path result)file(TO_NATIVE_PATH path result)file(DOWNLOAD url file )file(UPLOAD filename url )file(TIMESTAMP filename variable )file(GENERATE OUTPUT output_file <INPUT input_file|CONTENT input_content> )

WRITE schreibt eine Nachricht in eine Datei namens ‚filename‘. Es überschreibt die Datei, wenn sie bereits vorhanden ist, und erstellt die Datei, wenn sie nicht vorhanden ist. (Wenn es sich bei der Datei um eine Build-Eingabe handelt, verwenden Sie configure_file, um die Datei nur zu aktualisieren, wenn sich ihr Inhalt ändert.)

APPENDschreibt eine Nachricht wie WRITE in eine Datei, außer sie wird an das Ende der Datei angehängt

READ liest den Inhalt einer Datei und speichert ihn in der Variablen.Es beginnt mit dem angegebenen Offset und liest bis zu Numbyte. Wenn das Argument HEX angegeben ist, werden die Binärdaten inhexadezimale Darstellung und dies wird in der Variablen gespeichert.

MD5, SHA1, SHA224, SHA256, SHA384 und SHA512 berechnen einen kryptografischen Hash des Inhalts einer Datei.

STRINGS analysiert eine Liste von ASCII-Strings aus einer Datei und speichert sie in einer Variablen. Binärdaten in der Datei werden ignoriert. Wagenrücklaufzeichen (CR) werden ignoriert. Es funktioniert auch für Intel Hex- und MotorolaS-Record-Dateien, die beim Lesen automatisch in das Binärformat konvertiert werden. Deaktivieren Sie dies mit NO_HEX_CONVERSION .

LIMIT_COUNT legt die maximale Anzahl der zurückzugebenden Zeichenfolgen fest. LIMIT_INPUTlegt die maximale Anzahl von Bytes fest, die aus der Eingabedatei gelesen werden sollen.LIMIT_OUTPUT legt die maximale Anzahl von Bytes fest, die in der Outputvariable gespeichert werden sollen. LENGTH_MINIMUM setzt die minimale Länge einer Zeichenkette toreturn. Kürzere Strings werden ignoriert. LENGTH_MAXIMUM setzt die maximale Länge einer zurückzugebenden Zeichenfolge. Längere Saiten werden in Saiten geteiltnicht länger als die maximale Länge. Mit NEWLINE_CONSUME können Zeilenumbrüche in Zeichenfolgen eingefügt werden, anstatt sie zu beenden.

REGEX gibt einen regulären Ausdruck an, mit dem eine Zeichenfolge bereturned werden muss. Typische Verwendung

file(STRINGS myfile.txt myfile)

speichert eine Liste in der Variablen „myfile“, in der jedes Element eine Zeile aus der Eingabedatei ist.

GLOB generiert eine Liste aller Dateien, die den globbingexpressions entsprechen, und speichert sie in der Variablen. Globbing-Ausdrücke sindähnlich wie reguläre Ausdrücke, aber viel einfacher. Wenn für einen Ausdruck ein RELATIVES Flag angegeben ist, werden die Ergebnisse als relativer Pfad zum angegebenen Pfad zurückgegeben. (Wir empfehlen die Verwendung von GLOB nicht, um eine Liste von Quelldateien aus Ihrem Quellbaum zu sammeln. Wenn noCMakeLists.txt-Datei ändert sich, wenn eine Quelle hinzugefügt oder entfernt wird, dann kann das generierte Build-System nicht wissen, wann CMake zur Neugenerierung aufgefordert werden soll.)

Beispiele für Globbing-Ausdrücke sind:

*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt

GLOB_RECURSE generiert eine Liste ähnlich der regulären GLOB, außer es werden alle Unterverzeichnisse des übereinstimmenden Verzeichnisses durchlaufen und die Dateien gefunden. Unterverzeichnisse, die Symlinks sind, werden nur durchquertwenn FOLLOW_SYMLINKS angegeben ist oder die cmake-Richtlinie CMP0009 nicht auf NEW gesetzt ist.Weitere Informationen finden Sie unter cmake -help-policy CMP0009 .

Beispiele für rekursives Globbing sind:

/dir/*.py - match all python files in /dir and subdirectories

MAKE_DIRECTORY erstellt die angegebenen Verzeichnisse, auch wenn ihre übergeordneten Verzeichnisse noch nicht existieren

RENAME verschiebt eine Datei oder ein Verzeichnis innerhalb eines Dateisystems und ersetzt thedestination atomar.

REMOVE entfernt die angegebenen Dateien, auch in Unterverzeichnissen

REMOVE_RECURSE entfernt die angegebenen Dateien und Verzeichnisse, auchnicht leere Verzeichnisse

RELATIVE_PATH bestimmt den relativen Pfad vom Verzeichnis zur angegebenen Datei.

TO_CMAKE_PATH konvertiert den Pfad mit unix / in einen Cmake-Stilpfad.Die Eingabe kann ein einzelner Pfad oder ein Systempfad wie „$ ENV{PATH}“ sein.Beachten Sie, dass die doppelten Anführungszeichen um den ENV Aufruf TO_CMAKE_PATH nur ein Argument TO_CMAKE_PATH . Dieser Befehl konvertiert auch die nativen Listdelimiters für eine Liste von Pfaden wie die Umgebungsvariable PATH .

TO_NATIVE_PATH funktioniert genau wie TO_CMAKE_PATH , wird jedoch vom Acmake-Stilpfad in den nativen Pfadstil für Windows und / forUNIX konvertiert.

DOWNLOAD lädt die angegebene URL in die angegebene Datei herunter. Wenn LOG var angegeben ist, wird ein Protokoll des Downloads in var abgelegt. Wenn STATUS var angegeben ist, wird der Status der Operation in var gesetzt. Der Status wird in einer Liste der Länge 2 zurückgegeben. Das erste Element ist der numericreturn-Wert für die Operation und das zweite Element ist ein stringvalue für den Fehler. Ein numerischer Fehler 0 bedeutet keinen Fehler im Betrieb. Wenn TIMEOUT time angegeben ist, wird die Operation timeoutnach Zeit Sekunden, Zeit sollte als Ganzzahl angegeben werden. TheINACTIVITY_TIMEOUT gibt eine ganzzahlige Anzahl von Sekunden ofinactivity an, nach denen der Vorgang beendet werden soll. Wenn EXPECTED_HASH ALGO=value angegeben ist, überprüft der Vorgang, ob der tatsächliche Hash der heruntergeladenen Datei mit dem erwarteten Wert übereinstimmt, wobei ALGO einer von MD5, SHA1, SHA224, SHA256, SHA384 oder SHA512 ist. Wenn es nicht übereinstimmt, schlägt der Vorgang mit einem Fehler fehl. („EXPECTED_MD5sum“ ist die Abkürzung für „EXPECTED_HASH MD5 =sum“.) Wenn SHOW_PROGRESS angegeben ist, werden Fortschrittsinformationen als Statusmeldungen gedruckt, bis der Vorgang abgeschlossen ist. Für HTTPS-URLs muss CMake mit OpenSSL erstellt werden. TLS/SSL-Zertifikate werden standardmäßig nicht geprüft. SetTLS_VERIFY auf ON , um Zertifikate zu überprüfen und / oder EXPECTED_HASH zu verwenden, um heruntergeladene Inhalte zu überprüfen. Legen Sie TLS_CAINFO fest, um eine customCertificate-Berechtigungsdatei anzugeben. Wenn keine der beiden TLS-Optionen angegeben ist, überprüft CMakewill die Variablen CMAKE_TLS_VERIFY bzw. CMAKE_TLS_CAINFO.

UPLOAD lädt die angegebene Datei auf die angegebene URL hoch. Wenn LOG var angegeben ist, wird ein Protokoll des Uploads in var abgelegt. Wenn STATUS var angegeben ist, wird der Status der Operation in var gesetzt. Der Status wird in einer Liste der Länge 2 zurückgegeben. Das erste Element ist der numericreturn-Wert für die Operation und das zweite Element ist ein stringvalue für den Fehler. Ein numerischer Fehler 0 bedeutet keinen Fehler im Betrieb. Wenn TIMEOUT time angegeben ist, wird die Operation timeoutnach Zeit Sekunden, Zeit sollte als Ganzzahl angegeben werden. TheINACTIVITY_TIMEOUT gibt eine ganzzahlige Anzahl von Sekunden ofinactivity an, nach denen der Vorgang beendet werden soll. Wenn show_progress angegeben ist, werden Fortschrittsinformationen als Statusmeldungen gedruckt, bis der Vorgang abgeschlossen ist.

TIMESTAMP schreibt eine Zeichenfolgendarstellung der Änderungszeit des Dateinamens in die Variable.

Sollte der Befehl nicht in der Lage sein, eine Zeitstempelvariable zu erhalten, wird auf die leere Zeichenfolge „“ gesetzt.

Weitere Details finden Sie in der Dokumentation des Unterbefehls string TIMESTAMP.

Der Befehl file() stellt auch Signaturen zum KOPIEREN und INSTALLIEREN bereit:

file(<COPY|INSTALL> files... DESTINATION <dir> ] )

Die Kopiersignatur kopiert Dateien, Verzeichnisse und Symlinks in einen Zielordner. Relative Eingabepfade werden in Bezug auf das aktuelle Quellverzeichnis ausgewertet, und ein relatives Ziel wird in Bezug auf das aktuelle Build-Verzeichnis ausgewertet. Copyingperves Eingabedatei Zeitstempel, und optimiert eine Datei, wenn es existsat das Ziel mit dem gleichen Zeitstempel. Beim Kopieren bleiben inputpermissions erhalten, es sei denn, es werden explizite Berechtigungen oder NO_SOURCE_PERMISSIONS vergeben (Standard ist USE_SOURCE_PERMISSIONS). Dokumentation zu Berechtigungen, PATTERN, REGEX und EXCLUDEoptions finden Sie im Befehl install(DIRECTORY).

Die Installationssignatur unterscheidet sich geringfügig von der KOPIE: Sie gibt statusmessages aus, und NO_SOURCE_PERMISSIONS ist der Standardwert. Installationsskriptegeneriert durch den Befehl install() Verwenden Sie diese Signatur (mit einigenundokumentierte Optionen für den internen Gebrauch).

GENERATE schreibt eine <output_file> mit Inhalt aus einer<input_file> oder aus <input_content> . Die Ausgabe wird bedingt basierend auf dem Inhalt der < -Bedingung> generiert. Die Datei wird zur CMake-Generierungszeit generiert und die Eingabe kann Generatorausdrücke enthalten. Die <-Bedingung>, <output_file> und <input_file> können auch Generatorausdrücke enthalten. Die < Bedingung> muss entweder ‚0‘ oder ‚1‘ auswerten. Die <output_file> muss unter allen Konfigurationen und unter allen Aufrufen von file(GENERATE) zu einem eindeutigen Namen ausgewertet werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.