file¶
Comando di manipolazione dei file.
file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)
Scrivi <content>
in un file chiamato <filename>
. Se il file non esiste, verrà creato. Se il file esiste già, la modalità WRITE
lo sovrascriverà e la modalità APPEND
si aggiungerà alla fine.(Se il file è un input di compilazione, utilizzare il comando configure_file()
per aggiornare il file solo quando il suo contenuto cambia.)
file(READ <filename> <variable> )
Leggere il contenuto da un file chiamato <filename>
e memorizzarlo in un<variable>
. Opzionalmente inizia dal dato <offset>
e leggi al massimo <max-in>
byte. L’opzione HEX
fa sì che i dati vengano convertiti in una rappresentazione esadecimale (utile per i dati binari).
file(STRINGS <filename> <variable> )
Analizza un elenco di stringhe ASCII da <filename>
e memorizzalo in<variable>
. I dati binari nel file vengono ignorati. I caratteri di ritorno a capo (\r
, CR) vengono ignorati. Le opzioni sono:
LENGTH_MAXIMUM <max-len>
Considera solo stringhe di una data lunghezza al massimo.
LENGTH_MINIMUM <min-len>
Considera solo stringhe di almeno una data lunghezza.
LIMIT_COUNT <max-num>
Limita il numero di stringhe distinte da estrarre.
LIMIT_INPUT <max-in>
Limita il numero di byte di input da leggere dal file.
LIMIT_OUTPUT <max-out>
Limita il numero di byte totali da memorizzare nel <variable>
.
NEWLINE_CONSUME
Tratta i caratteri di nuova riga (\n
, LF) come parte del contenuto della stringainvece di terminarli.
NO_HEX_CONVERSION
I file Intel Hex e Motorola S-record vengono automaticamente convertiti in binary durante la lettura, a meno che non venga fornita questa opzione.
REGEX <regex>
Considera solo le stringhe che corrispondono all’espressione regolare data.
ENCODING <encoding-type>
Considera le stringhe di una determinata codifica. Le codifiche attualmente supportate sono: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Se l’opzione di CODIFICA non è fornita e il file ha un segno di ordine di byte, l’opzione di CODIFICA verrà impostata in modo predefinito per rispettare il segno di ordine di byte.
Ad esempio, il codice
file(STRINGS myfile.txt myfile)
memorizza un elenco nella variabile myfile
in cui ogni elemento è una lineadal file di input.
file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> <filename> <variable>)
Calcola un hash crittografico del contenuto di <filename>
e memorizzalo in un <variable>
.
file(GLOB <variable> )file(GLOB_RECURSE <variable> )
Genera un elenco di file che corrispondono a <globbing-expressions>
e memorizzalo in <variable>
. Le espressioni Globbing sono simili aespressioni regolari, ma molto più semplici. Se il flag RELATIVE
è specificato, i risultati verranno restituiti come percorsi relativi al percorso specificato. Non è definito alcun ordine specifico di risultati. Se l’ordine è importante, ordina esplicitamente l’elenco (ad esempio usando il comando list(SORT)
).
Per impostazione predefinitaGLOB
elenca le directory – le directory vengono omesse nel risultato se LIST_DIRECTORIES
è impostato su false.
Nota
Non è consigliabile utilizzare GLOB per raccogliere un elenco di file sorgente dal tuo albero dei sorgenti. Se non CMakeLists.il file txt cambia quando una fonte viene aggiunta o rimossa, quindi il sistema di compilazione generato non può sapere quando toask CMake da rigenerare.
Esempi di espressioni globbing includono:
*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt
La modalità GLOB_RECURSE
attraverserà tutte le sottodirectory della directory corrispondente e corrisponderà ai file. Le sottodirectory che sono symlinks vengono attraversate solo se viene specificato FOLLOW_SYMLINKS
o la politicaCMP0009
non è impostata su NEW
.
Per impostazione predefinitaGLOB_RECURSE
omette le directory dall’elenco dei risultati – impostando LIST_DIRECTORIES
su true aggiunge le directory all’elenco dei risultati.Se viene fornito FOLLOW_SYMLINKS
o la politica CMP0009
non è impostata suOLD
, LIST_DIRECTORIES
considera i collegamenti simbolici come directory.
Esempi di globbing ricorsivo includono:
/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)
Spostare un file o una directory all’interno di un filesystem da <oldname>
a<newname>
, sostituendo atomicamente la destinazione.
file(REMOVE )file(REMOVE_RECURSE )
Rimuovere i file dati. La modalità REMOVE_RECURSE
rimuoverà i file e le directory dati, anche le directory non vuote
file(MAKE_DIRECTORY )
Crea le directory fornite e i loro genitori secondo necessità.
file(RELATIVE_PATH <variable> <directory> <file>)
Calcola il percorso relativo da un <directory>
a un <file>
e memorizzalo nel <variable>
.
file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)
La modalità TO_CMAKE_PATH
converte un <path>
nativo in un percorso di stile cmake con barre in avanti (/
). L’input può essere un percorso singolo o un percorso di ricerca asystem come $ENV{PATH}
. Un percorso di ricerca verrà convertito in un elenco in stile cmake separato da caratteri ;
.
La modalità TO_NATIVE_PATH
converte uno stile cmake <path>
in un nativepath con barre specifiche della piattaforma (\
su Windows e /
altrove).
Usa sempre le virgolette intorno a <path>
per essere sicuro che sia trattato come un singolo argomento per questo comando.
file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )
La modalità DOWNLOAD
scarica il dato <url>
in un locale <file>
.La modalità UPLOAD
carica un <file>
locale in un determinato <url>
.
Le opzioni per entrambi DOWNLOAD
e UPLOAD
sono:
INACTIVITY_TIMEOUT <seconds>
Terminare l’operazione dopo un periodo di inattività.
LOG <variable>
Memorizzare un log leggibile dell’operazione in una variabile.
SHOW_PROGRESS
Stampa le informazioni di avanzamento come messaggi di stato fino a quando l’operazione non è completata.
STATUS <variable>
Memorizza lo stato risultante dell’operazione in una variabile.Lo stato è un elenco separato ;
di lunghezza 2.Il primo elemento è il valore numerico restituito per l’operazione e il secondo elemento è un valore stringa per l’errore.Un errore numerico 0
significa nessun errore nell’operazione.
TIMEOUT <seconds>
Terminare l’operazione al termine di un determinato tempo totale.
Opzioni aggiuntive a DOWNLOAD
sono:
EXPECTED_HASH ALGO=<value>
Verificare che l’hash del contenuto scaricato corrisponda al valore atteso, dove
ALGO
è uno deiMD5
,SHA1
,SHA224
,SHA256
,SHA384
, oppureSHA512
. Se non corrisponde, l’operazione fallisce con un errore.
EXPECTED_MD5 <value>
Storico short-mano per EXPECTED_HASH MD5=<value>
.
TLS_VERIFY <ON|OFF>
Specificare se verificare il certificato del server per gli URL https://
.L’impostazione predefinita è non verificare.
TLS_CAINFO <file>
Specifica un file di autorità di certificazione personalizzato per gli URL https://
.
Per https://
URL CMake deve essere costruito con il supporto OpenSSL. TLS/SSL
i certificati non sono controllati per impostazione predefinita. Impostare TLS_VERIFY
a ON
per controllare i certificati e / o utilizzare EXPECTED_HASH
per verificare il contenuto scaricato.Se non viene data nessuna opzione TLS
CMake controllerà le variabili CMAKE_TLS_VERIFY
e CMAKE_TLS_CAINFO
, rispettivamente.
file(TIMESTAMP <filename> <variable> )
Calcola una rappresentazione stringa del tempo di modifica di <filename>
e memorizzalo in <variable>
. Se il comando non è in grado di ottenere la variabile atimestamp verrà impostata sulla stringa vuota (“”).
Vedere il comando string(TIMESTAMP)
per la documentazione delle opzioni <format>
e UTC
.
file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )
Genera un file di output per ogni configurazione di build supportata dall’attualeCMake Generator
. Valutaregenerator expressions
dal contenuto di input per produrre il contenuto di output. Le opzioni sono:
CONDITION <condition>
Genera il file di output per una particolare configurazione solo sela condizione è vera. La condizione deve essere 0
o 1
dopo aver valutato le espressioni del generatore.
CONTENT <content>
Usa il contenuto dato esplicitamente come input.
INPUT <input-file>
Usa il contenuto di un determinato file come input.
OUTPUT <output-file>
Specificare il nome del file di output da generare. Utilizzare espressioni generatoricome $<CONFIG>
per specificare un nome file di output specifico della configurazione. Configurazioni multiple possono generare lo stesso file di output onlyif il contenuto generato è identico. In caso contrario, <output-file>
deve valutare un nome univoco per ogni configurazione.
Deve essere fornita esattamente un’opzione CONTENT
o INPUT
. Un fileOUTPUT
specifico può essere nominato al massimo da una chiamata di file(GENERATE)
.I file generati vengono modificati nelle successive esecuzioni di cmake solo se il loro contenuto è cambiato.
file(<COPY|INSTALL> <files>... DESTINATION <dir> ] )
La firma COPY
copia file, directory e collegamenti simbolici nella cartella adestination. I percorsi di input relativi vengono valutati rispetto alla directory di origine corrente e viene valutata una destinazione relativa rispetto alla directory di compilazione corrente. Copyingpreserves timestamp del file di input e ottimizza un file se esiste nella destinazione con lo stesso timestamp. La copia conserva le inputpermissions a meno che non vengano fornite autorizzazioni esplicite o NO_SOURCE_PERMISSIONS
(l’impostazione predefinita è USE_SOURCE_PERMISSIONS
).
Vedere il comando install(DIRECTORY)
per la documentazione delle permissioni, FILES_MATCHING
, PATTERN
, REGEX
, e EXCLUDE
opzioni. La copia delle directory preserva la struttura del loro contenuto anche se le opzioni vengono utilizzate per selezionare un sottoinsieme di file.
La firma INSTALL
differisce leggermente da COPY
: stampa i messaggi status (soggetti alla variabile CMAKE_INSTALL_MESSAGE
) e NO_SOURCE_PERMISSIONS
è predefinita.Script di installazione generati dal comando install()
usa questa firma (con alcune opzioni non documentate per uso interno).
file(LOCK <path> )
Bloccare un file specificato da <path>
se no DIRECTORY
opzione presente e file<path>/cmake.lock
altrimenti. Il file verrà bloccato per l’ambito definito dall’opzioneGUARD
(il valore predefinito è PROCESS
). RELEASE
opzione può essere utilizzataper sbloccare il file in modo esplicito. Se l’opzione TIMEOUT
non è specificata, CMake aspetterà fino a quando il blocco non avrà successo o fino a quando non si verificherà un errore fatale. Se TIMEOUT
è impostato su 0
il blocco verrà provato una volta e il risultato verrà segnalato immediatamente. SeTIMEOUT
non è 0
CMake proverà a bloccare il file per il periodo specificato dal valore <seconds>
. Eventuali errori saranno interpretati come fatali se non esiste un’opzioneRESULT_VARIABLE
. Altrimenti il risultato verrà memorizzato in <variable>
e sarà 0
in caso di successo o messaggio di errore in caso di errore.
Si noti che il blocco è consultivo: non vi è alcuna garanzia che altri processi rispetteranno questo blocco, ovvero lock sincronizza due o più istanze CMake condividendo alcune risorse modificabili. Una logica simile applicata a DIRECTORY
option-locking parent directory non impedisce ad altri LOCK
comandi di bloccare qualsiasi directory o file di file.
Non è consentito tentare di bloccare il file due volte. Qualsiasi directory intermedia efile stesso verrà creato se non esistono. Opzioni GUARD
e TIMEOUT
ignorate nell’operazione RELEASE
.