Datei¶

Dateimanipulationsbefehl.

file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)

Schreiben Sie <content> in eine Datei mit dem Namen <filename>. Wenn die Datei nicht existiert, wird sie erstellt. Wenn die Datei bereits vorhanden ist, überschreibt der WRITE -Modus sie und der APPEND -Modus hängt sie an das Ende an.Alle Verzeichnisse in dem von <filename> angegebenen Pfad, die nicht vorhanden sind, werden erstellt.

Wenn die Datei eine Build-Eingabe ist, verwenden Sie den Befehl configure_file(), um die Datei nur zu aktualisieren, wenn sich ihr Inhalt ändert.

file(READ <filename> <variable> )

Lesen Sie Inhalte aus einer Datei namens <filename> und speichern Sie sie in einer <variable> . Beginnen Sie optional mit den angegebenen <offset> undLesen Sie höchstens <max-in> Bytes. Die Option HEX bewirkt, dass Daten in eine hexadezimale Darstellung konvertiert werden (nützlich für Binärdaten).

file(STRINGS <filename> <variable> )

Analysieren Sie eine Liste von ASCII-Zeichenfolgen aus <filename> und speichern Sie sie in<variable> . Binärdaten in der Datei werden ignoriert. Wagenrücklaufzeichen (\r, CR) werden ignoriert. Die Optionen sind:

LENGTH_MAXIMUM <max-len>

Betrachten Sie nur Zeichenfolgen mit höchstens einer bestimmten Länge.

LENGTH_MINIMUM <min-len>

Betrachten Sie nur Zeichenfolgen mit mindestens einer bestimmten Länge.

LIMIT_COUNT <max-num>

Begrenzen Sie die Anzahl der zu extrahierenden eindeutigen Zeichenfolgen.

LIMIT_INPUT <max-in>

Begrenzen Sie die Anzahl der Eingabebytes, die aus der Datei gelesen werden sollen.

LIMIT_OUTPUT <max-out>

Begrenzen Sie die Anzahl der Gesamtbytes, die in <variable> gespeichert werden sollen.

NEWLINE_CONSUME

Behandeln Sie Zeilenumbrüche (\n, LF) als Teil des Zeichenfolgeninhalts, anstatt an ihnen zu enden.

NO_HEX_CONVERSION

Intel Hex- und Motorola S-Record-Dateien werden beim Lesen automatisch in Binär konvertiert, sofern diese Option nicht angegeben ist.

REGEX <regex>

Betrachten Sie nur Zeichenfolgen, die mit dem angegebenen regulären Ausdruck übereinstimmen.

ENCODING <encoding-type>

Betrachten Sie Zeichenfolgen einer bestimmten Codierung. Derzeit unterstützte Kodierungen sind: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Wenn die CODIERUNG optionis nicht zur verfügung gestellt und die datei hat eine Byte Auftrag Mark, die CODIERUNG optionwill werden standardmäßig zu respektieren die Byte Auftrag Mark.

Zum Beispiel der Code

file(STRINGS myfile.txt myfile)

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

file(<HASH> <filename> <variable>)

Berechnen Sie einen kryptografischen Hash des Inhalts von <filename> undspeichern Sie ihn in einem <variable> . Die unterstützten <HASH> Algorithmusnamensind diejenigen, die im Befehl string(<HASH>) aufgeführt sind.

file(GLOB <variable> )file(GLOB_RECURSE <variable> )

Generieren Sie eine Liste von Dateien, die mit <globbing-expressions> übereinstimmen, und fügen Sie sie in <variable> ein. Globbing-Ausdrücke sind ähnlichregelmäßige Ausdrücke, aber viel einfacher. Wenn das Flag RELATIVE angegeben ist, werden die Ergebnisse als relative Pfade zum angegebenen Pfad zurückgegeben. Die Ergebnisse werden lexikographisch geordnet.

Standardmäßig listet GLOB Verzeichnisse auf – Verzeichnisse werden im Ergebnis weggelassen, wennLIST_DIRECTORIES auf false gesetzt ist.

Hinweis

Wir empfehlen nicht, GLOB zu verwenden, um eine Liste von Quelldateien aus Ihrem Quellbaum zu sammeln. Wenn keine CMakeLists.txt-Datei ändert sich, wenn eine Quelle hinzugefügt oder entfernt wird, dann kann das generierte Build-System nicht wissen, wann CMake neu generiert 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

Der GLOB_RECURSE -Modus durchläuft alle Unterverzeichnisse des übereinstimmenden Verzeichnisses und stimmt mit den Dateien überein. Unterverzeichnisse, die Symlinks sind, werden nur durchlaufen, wenn FOLLOW_SYMLINKS angegeben ist oder wennCMP0009 nicht auf NEW gesetzt ist.

Standardmäßig lässt GLOB_RECURSE Verzeichnisse aus der Ergebnisliste aus – wenn SieLIST_DIRECTORIES auf true setzen, werden Verzeichnisse zur Ergebnisliste hinzugefügt.Wenn FOLLOW_SYMLINKS angegeben ist oder die Richtlinie CMP0009 nicht aufOLD festgelegt ist, behandelt LIST_DIRECTORIES Symlinks als Verzeichnisse.

Beispiele für rekursives Globbing sind:

/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)

Verschieben Sie eine Datei oder ein Verzeichnis innerhalb eines Dateisystems von <oldname> nach<newname> und ersetzen Sie das Ziel atomar.

file(REMOVE )file(REMOVE_RECURSE )

Entfernen Sie die angegebenen Dateien. Der REMOVE_RECURSE -Modus entfernt die angegebenen Dateien und Verzeichnisse, auch nicht leere Verzeichnisse. Es wird kein Fehler ausgegeben, wenn keine Agiven-Datei vorhanden ist.

file(MAKE_DIRECTORY )

Erstellen Sie die angegebenen Verzeichnisse und deren Eltern nach Bedarf.

file(RELATIVE_PATH <variable> <directory> <file>)

Berechnen Sie den relativen Pfad von a <directory> zu a <file> und speichern Sie ihn in <variable> .

file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)

Der TO_CMAKE_PATH -Modus konvertiert einen nativen <path> in einen cmake-Stylepath mit Schrägstrichen (/). Die Eingabe kann ein einzelner Pfad oder ein Systemsuchpfad wie $ENV{PATH} sein. Ein Suchpfad wird in eine Liste im Cmake-Stil konvertiert, die durch ; Zeichen getrennt ist.

Der TO_NATIVE_PATH -Modus konvertiert einen <path> im Cmake-Stil in einen nativepath mit plattformspezifischen Schrägstrichen (\ unter Windows und / anderswo).

Verwenden Sie immer doppelte Anführungszeichen um <path>, um sicherzustellen, dass es als einzelnes Argument für diesen Befehl behandelt wird.

file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )

Der DOWNLOAD -Modus lädt die angegebene <url> auf eine lokale <file> herunter.Der UPLOAD -Modus lädt ein lokales <file> auf ein bestimmtes <url> hoch.

Optionen für DOWNLOAD und UPLOADsind:

INACTIVITY_TIMEOUT <seconds>

Beenden Sie den Vorgang nach einer Zeit der Inaktivität.

LOG <variable>

Speichern Sie ein lesbares Protokoll der Operation in einer Variablen.

SHOW_PROGRESS

Gibt Fortschrittsinformationen als Statusmeldungen aus, bis der Vorgang abgeschlossen ist.

STATUS <variable>

Speichern Sie den resultierenden Status der Operation in einer Variablen.Der Status ist eine ; getrennte Liste der Länge 2.Das erste Element ist der numerische Rückgabewert für die Operation und das zweite Element ist ein Zeichenfolgenwert für den Fehler.Ein 0 numerischer Fehler bedeutet keinen Fehler in der Operation.

TIMEOUT <seconds>

Beenden Sie den Vorgang nach Ablauf einer bestimmten Gesamtzeit.

USERPWD <username>:<password>

Legen Sie Benutzername und Passwort für den Betrieb fest.

HTTPHEADER <HTTP-header>

HTTP-Header für den Betrieb. Suboption kann mehrmals wiederholt werden.

Zusätzliche Optionen zu DOWNLOAD sind:

EXPECTED_HASH ALGO=<value>

Stellen Sie sicher, dass der Hash des heruntergeladenen Inhalts mit dem erwarteten Wert übereinstimmt, wobeiALGO einer der von file(<HASH>) unterstützten Algorithmen ist.Wenn es nicht übereinstimmt, schlägt der Vorgang mit einem Fehler fehl.

EXPECTED_MD5 <value>

Historische Short-Hand für EXPECTED_HASH MD5=<value>.

TLS_VERIFY <ON|OFF>

Geben Sie an, ob das Serverzertifikat für https://-URLs überprüft werden soll.Der Standardwert ist nicht verifizieren.

TLS_CAINFO <file>

Geben Sie eine benutzerdefinierte Zertifizierungsstellendatei für https://-URLs an.

Für https:// URLs muss CMake mit OpenSSL-Unterstützung erstellt werden. TLS/SSLZertifikate werden standardmäßig nicht geprüft. Setzen Sie TLS_VERIFY auf ON, um Zertifikate zu überprüfen, und/oder verwenden Sie EXPECTED_HASH, um heruntergeladene Inhalte zu überprüfen.Wenn keine der Optionen TLS angegeben ist, überprüft CMake die VariablenCMAKE_TLS_VERIFY bzw. CMAKE_TLS_CAINFO.

file(TIMESTAMP <filename> <variable> )

Berechnen Sie eine Zeichenfolgendarstellung der Änderungszeit von <filename>und speichern Sie sie in <variable> . Wenn der Befehl atimestamp nicht abrufen kann, wird die Variable auf die leere Zeichenfolge („“) gesetzt.

Die Dokumentation der Optionen <format> und UTC finden Sie im Befehl string(TIMESTAMP).

file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )

Generieren Sie eine Ausgabedatei für jede Build-Konfiguration, die vom aktuellenCMake Generator unterstützt wird. Werten Siegenerator expressionsaus dem Eingabeinhalt aus, um den Ausgabeinhalt zu erzeugen. Die Optionen sind:

CONDITION <condition>

Generieren Sie die Ausgabedatei für eine bestimmte Konfiguration nur, wenndie Bedingung ist wahr. Die Bedingung muss nach der Auswertung von Generatorausdrücken entweder 0 oder 1 sein.

CONTENT <content>

Verwenden Sie den explizit angegebenen Inhalt als Eingabe.

INPUT <input-file>

Verwenden Sie den Inhalt einer bestimmten Datei als Eingabe.Ein relativer Pfad wird in Bezug auf den WertCMAKE_CURRENT_SOURCE_DIR behandelt. Siehe Richtlinie CMP0070.

OUTPUT <output-file>

Geben Sie den Namen der zu generierenden Ausgabedatei an. Verwenden Sie Generatorausdrücke wie $<CONFIG>, um einen konfigurationsspezifischen Ausgabedateinamen anzugeben. Mehrere Konfigurationen können dieselbe Ausgabedatei nur generieren, wenn der generierte Inhalt identisch ist. Andernfalls muss <output-file> für jede Konfiguration zu einem eindeutigen Namen ausgewertet werden.Ein relativer Pfad (nach der Auswertung von Generatorausdrücken) wird behandeltin Bezug auf den Wert von CMAKE_CURRENT_BINARY_DIR.Siehe Richtlinie CMP0070.

Es muss genau eine CONTENT oder INPUT Option angegeben werden. Eine bestimmteOUTPUT -Datei kann höchstens durch einen Aufruf von file(GENERATE) benannt werden.Generierte Dateien werden geändert und ihr Zeitstempel bei nachfolgenden cmakeruns nur aktualisiert, wenn ihr Inhalt geändert wird.

Beachten Sie auch, dass file(GENERATE) die Ausgabedatei erst in der Generierungsphase erstellt. Die Ausgabedatei wurde noch nicht geschrieben, wenn der Befehlfile(GENERATE) zurückkehrt, sie wird erst geschrieben, nachdem alle CMakeLists.txt -Dateien eines Projekts verarbeitet wurden.

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

Die Signatur COPY 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 angegeben (Standardwert ist USE_SOURCE_PERMISSIONS).

Siehe den Befehl install(DIRECTORY) zur Dokumentation von Berechtigungen, FILES_MATCHING, PATTERN, REGEX, undEXCLUDE Optionen. Das Kopieren von Verzeichnissen behält die Struktur ihres Inhalts bei, selbst wenn Optionen zur Auswahl einer Teilmenge von Dateien verwendet werden.

Die Signatur INSTALL unterscheidet sich geringfügig von COPY: Sie druckt Statusmeldungen (vorbehaltlich der Variablen CMAKE_INSTALL_MESSAGE), und NO_SOURCE_PERMISSIONS ist der Standardwert.Installationsskripte, die vom Befehl install() generiert werdenVerwenden Sie diese Signatur (mit einigen undokumentierten Optionen für den internen Gebrauch).

file(LOCK <path> )

Sperren Sie eine durch <path> angegebene Datei, wenn keine DIRECTORY Option vorhanden ist, und Datei<path>/cmake.lock andernfalls. Die Datei wird für den durch die OptionGUARD definierten Bereich gesperrt (Standardwert ist PROCESS). RELEASE Option kann verwendet werden, um Datei explizit zu entsperren. Wenn die Option TIMEOUT nicht angegeben ist, wartet CMake, bis die Sperre erfolgreich ist oder ein schwerwiegender Fehler auftritt. Wenn TIMEOUT auf 0 gesetzt ist, wird die Sperre einmal versucht und das Ergebnis wird sofort gemeldet. WennTIMEOUT nicht 0 ist, versucht CMake, die Datei für den von <seconds> angegebenen Zeitraum zu sperren. Alle Fehler werden als fatal interpretiert, wenn keine OptionRESULT_VARIABLE vorhanden ist. Andernfalls wird das Ergebnis in <variable> gespeichert und bei Erfolg 0 oder bei Fehlermeldung 0.

Beachten Sie, dass lock beratend ist – es gibt keine Garantie dafür, dass andere Prozesse diese Sperre respektieren, dh lock synchronisiert zwei oder mehr CMake-Instanzen, die einige modifizierbare Ressourcen gemeinsam nutzen. Eine ähnliche Logik, die auf DIRECTORY Option -locking parent directory angewendet wird, verhindert nicht, dass andere LOCK Befehle ein beliebiges übergeordnetes Verzeichnis oder eine Datei sperren.

Der Versuch, die Datei zweimal zu sperren, ist nicht zulässig. Alle Zwischenverzeichnisse unddatei selbst wird erstellt, wenn sie nicht existieren. GUARD und TIMEOUTOptionen ignoriert auf RELEASE Betrieb.

Schreibe einen Kommentar

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