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 UPLOAD
sind:
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, wobei
ALGO
einer der vonfile(<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/SSL
Zertifikate 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 expressions
aus 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 TIMEOUT
Optionen ignoriert auf RELEASE
Betrieb.