File manipulation command.
file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)
schrijf <content>
in een bestand met de naam <filename>
. Als het bestand niet bestaat, wordt het aangemaakt. Als het bestand al bestaat, zal WRITE
modus het overschrijven en APPEND
modus zal aan het einde toevoegen.Alle mappen in het pad opgegeven door <filename>
die niet bestaan, zullen worden aangemaakt.
als het bestand een build-invoer is, gebruik dan de opdracht configure_file()
om het bestand alleen bij te werken wanneer de inhoud ervan verandert.
file(READ <filename> <variable> )
lees inhoud van een bestand met de naam <filename>
en sla het op in een<variable>
. Optioneel starten met de opgegeven <offset>
en maximaal <max-in>
bytes lezen. De optie HEX
zorgt ervoor dat gegevens worden geconverteerd naar een hexadecimale representatie (handig voor binaire gegevens).
file(STRINGS <filename> <variable> )
ontleedt een lijst met ASCII-strings uit <filename>
en slaat deze op in<variable>
. Binaire gegevens in het bestand worden genegeerd. Carriage return (\r
, CR) tekens worden genegeerd. De opties zijn::
LENGTH_MAXIMUM <max-len>
beschouw alleen snaren van hoogstens een bepaalde lengte.
LENGTH_MINIMUM <min-len>
beschouw alleen strings van ten minste een bepaalde lengte.
LIMIT_COUNT <max-num>
Beperk het aantal afzonderlijke tekenreeksen dat moet worden geëxtraheerd.
LIMIT_INPUT <max-in>
Beperk het aantal invoer bytes dat uit het bestand moet worden gelezen.
LIMIT_OUTPUT <max-out>
Beperk het aantal totale bytes dat moet worden opgeslagen in de <variable>
.
NEWLINE_CONSUME
behandel newline-tekens (\n
, LF) als onderdeel van de inhoud van de tekenreeks in plaats van ze te beëindigen.
NO_HEX_CONVERSION
Intel Hex en Motorola s-record bestanden worden automatisch geconverteerd naar binair tijdens het lezen, tenzij deze optie is gegeven.
REGEX <regex>
beschouw alleen strings die overeenkomen met de gegeven reguliere expressie.
ENCODING <encoding-type>
beschouw strings van een bepaalde codering. Momenteel ondersteunde coderingen zijn: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Als de coderingsoptie niet wordt verstrekt en het bestand een bytevolgorde Mark heeft, zal de coderingsoptie standaard het bytevolgorde Mark respecteren.
bijvoorbeeld de code
file(STRINGS myfile.txt myfile)
slaat een lijst op in de variabele myfile
waarin elk item een regel is van het invoerbestand.
file(<HASH> <filename> <variable>)
Bereken een cryptografische hash met de inhoud van <filename>
en bewaar deze in een <variable>
. De ondersteunde <HASH>
algoritme namen zijn die welke worden weergegeven door het commando string (<HASH>).
file(GLOB <variable> )file(GLOB_RECURSE <variable> )
Genereer een lijst met bestanden die overeenkomen met <globbing-expressions>
en bewaar deze in <variable>
. Globbing expressions zijn vergelijkbaar metregular expressions, maar veel eenvoudiger. Als RELATIVE
vlag is gespecificeerd, zullen de resultaten worden geretourneerd als relatieve paden naar het gegeven pad. De resultaten worden lexicografisch geordend.
standaard GLOB
lijsten mappen-mappen worden weggelaten in het resultaat alsLIST_DIRECTORIES
is ingesteld op onwaar.
Note
we raden niet aan GLOB te gebruiken om een lijst met bronbestanden van onze bronstructuur te verzamelen. Als er geen CMakeLists.txt-bestand verandert wanneer een bron wordt toegevoegd of verwijderd, dan kan het gegenereerde bouwsysteem niet weten wanneer cmake moet worden gevraagd om te regenereren.
voorbeelden van globbing-uitdrukkingen zijn::
*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt
de GLOB_RECURSE
– modus zal alle submappen van de overeenkomende map doorlopen en overeenkomen met de bestanden. Submappen die symlinks zijn, worden alleen doorlopen als FOLLOW_SYMLINKS
is opgegeven of als beleidCMP0009
niet is ingesteld op NEW
.
standaard laat GLOB_RECURSE
mappen buiten de resultatenlijst – instellingLIST_DIRECTORIES
naar waar voegt mappen toe aan de resultatenlijst.Als FOLLOW_SYMLINKS
gegeven is of beleid CMP0009
niet ingesteld is opOLD
dan behandelt LIST_DIRECTORIES
symlinks als mappen.
voorbeelden van recursieve globbing zijn::
/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)
Verplaats een bestand of map binnen een bestandssysteem van <oldname>
naar<newname>
, waarbij de bestemming atomisch wordt vervangen.
file(REMOVE )file(REMOVE_RECURSE )
verwijder de opgegeven bestanden. De REMOVE_RECURSE
modus zal de bestanden en mappen verwijderen, ook niet-lege mappen. Er wordt geen fout weergegeven als het agiven-bestand niet bestaat.
file(MAKE_DIRECTORY )
maak de gegeven directory ‘ s en hun ouders als dat nodig is.
file(RELATIVE_PATH <variable> <directory> <file>)
Bereken het relatieve pad van een <directory>
naar een <file>
en bewaar het in de <variable>
.
file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)
de modus TO_CMAKE_PATH
Converteert een standaard <path>
naar een cmake-stijlpad met schuine strepen (/
). De invoer kan een enkel pad zijn of een systeemzoekpad zoals $ENV{PATH}
. Een zoekpad zal worden geconverteerd naar een cmake-stijl lijst gescheiden door ;
tekens.
de TO_NATIVE_PATH
– modus Converteert een cmake-stijl <path>
naar een native pad met platformspecifieke schuine strepen (\
op Windows en /
elders).
Gebruik altijd dubbele aanhalingstekens rond de <path>
om er zeker van te zijn dat het wordt behandeld als een enkel argument voor dit commando.
file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )
de DOWNLOAD
modus downloadt de gegeven <url>
naar een lokale <file>
.De modus UPLOAD
uploadt een lokale <file>
naar een gegeven <url>
.
opties voor zowel DOWNLOAD
als UPLOAD
zijn:
INACTIVITY_TIMEOUT <seconds>
Beëindig de bewerking na een periode van inactiviteit.
LOG <variable>
Sla een voor mensen leesbare log van de bewerking op in een variabele.
SHOW_PROGRESS
voortgangsinformatie afdrukken als statusberichten totdat de bewerking is voltooid.
STATUS <variable>
sla de resulterende status van de bewerking op in een variabele.De status is een ;
gescheiden lijst van lengte 2.Het eerste element is de numerieke retourwaarde voor de operatie,en het tweede element is een tekenreekswaarde voor de fout.Een numerieke fout 0
betekent geen fout in de bewerking.
TIMEOUT <seconds>
de bewerking beëindigen na het verstrijken van een bepaalde Totale tijd.
USERPWD <username>:<password>
gebruikersnaam en wachtwoord instellen voor gebruik.
HTTPHEADER <HTTP-header>
HTTP-header voor operatie. Suboptie kan meerdere keren worden herhaald.
aanvullende opties voor DOWNLOAD
zijn:
EXPECTED_HASH ALGO=<value>
Controleer of de hash van de gedownloade inhoud overeenkomt met de verwachte waarde, waarbij
ALGO
een van de doorfile(<HASH>)
ondersteunde algoritmen is.Als het niet overeenkomt, mislukt de bewerking met een fout.
EXPECTED_MD5 <value>
Historische korte hand voor EXPECTED_HASH MD5=<value>
.
TLS_VERIFY <ON|OFF>
Geef op of het servercertificaat voor https://
URL ‘ s moet worden geverifieerd.De standaard is om niet te verifiëren.
TLS_CAINFO <file>
Geef een aangepast certificaat Authoriteitsbestand op voor https://
URL ‘ s.
voor https://
URL ‘ s moet CMake worden gebouwd met OpenSSL-ondersteuning. TLS/SSL
certificaten worden standaard niet gecontroleerd. Stel TLS_VERIFY
in op ON
om certificaten te controleren en / of gebruik EXPECTED_HASH
om gedownloade inhoud te controleren.Als geen van beide TLS
opties is gegeven, zal CMake de variabelenCMAKE_TLS_VERIFY
en CMAKE_TLS_CAINFO
controleren.
file(TIMESTAMP <filename> <variable> )
Bereken een tekenreeksweergave van de wijzigingstijd van <filename>
en sla deze op in <variable>
. Mocht het commando niet in staat zijn om atimestamp variabele te verkrijgen zal worden ingesteld op de lege string (“”).
zie het string(TIMESTAMP)
commando voor documentatie van de <format>
en UTC
opties.
file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )
Genereer een uitvoerbestand voor elke build-configuratie die wordt ondersteund door de huidigeCMake Generator
. Evalueergenerator expressions
uit de input – inhoud om de output-inhoud te produceren. De opties zijn::
CONDITION <condition>
Genereer het uitvoerbestand voor een bepaalde configuratie alleen als de voorwaarde Waar is. De voorwaarde moet 0
of 1
zijn na evaluatie van de generatoruitdrukkingen.
CONTENT <content>
gebruik de inhoud expliciet als input.
INPUT <input-file>
gebruik de inhoud van een bepaald bestand als invoer.Een relatief pad wordt behandeld met betrekking tot de waardeCMAKE_CURRENT_SOURCE_DIR
. Zie beleid CMP0070
.
OUTPUT <output-file>
Geef de naam van het te genereren uitvoerbestand op. Gebruik generator expressionssuch als $<CONFIG>
om een configuratie-specifieke uitvoer bestandsnaam op te geven. Meerdere configuraties kunnen alleen hetzelfde uitvoerbestand genereren als de gegenereerde inhoud identiek is. Anders moet <output-file>
voor elke configuratie een unieke naam evalueren.Een relatief pad (na het evalueren van generatoruitdrukkingen) wordt behandeld met betrekking tot de waarde CMAKE_CURRENT_BINARY_DIR
.Zie beleid CMP0070
.
exact één CONTENT
of INPUT
optie moet worden opgegeven. Een specifiekOUTPUT
bestand kan worden benoemd door ten hoogste één aanroep van file(GENERATE)
.Gegenereerde bestanden worden gewijzigd en hun tijdstempel bijgewerkt op de volgende cmakeruns alleen als hun inhoud wordt gewijzigd.
merk ook op dat file(GENERATE)
het uitvoerbestand pas in de generatiefase maakt. Het uitvoerbestand zal nog niet geschreven zijn als het file(GENERATE)
Commando terugkeert, het wordt alleen geschreven na het verwerken van alle CMakeLists.txt
bestanden van een project.
file(<COPY|INSTALL> <files>... DESTINATION <dir> ] )
de COPY
handtekening kopieert bestanden, mappen en symlinks naar de map adestination. Relatieve invoerpaden worden geëvalueerd ten opzichte van de huidige bronmap, en een relatieve bestemming wordt geëvalueerd ten opzichte van de huidige build-map. Copying behoudt invoerbestand tijdstempels, en optimaliseert uit een bestand als het bestaat op de bestemming met dezelfde tijdstempel. Kopiëren behoudt invoerpermissies tenzij expliciete machtigingen of NO_SOURCE_PERMISSIONS
worden gegeven (standaard is USE_SOURCE_PERMISSIONS
).
zie de opdracht install(DIRECTORY)
voor documentatie van permissies, FILES_MATCHING
, PATTERN
, REGEX
, enEXCLUDE
opties. Het kopiëren van mappen behoudt de structuur van hun inhoud, Zelfs als opties worden gebruikt om een subset offiles te selecteren.
de INSTALL
handtekening wijkt enigszins af van COPY
: het printstatusberichten (onder voorbehoud van de variabele CMAKE_INSTALL_MESSAGE
), en NO_SOURCE_PERMISSIONS
is standaard.Installatie scripts gegenereerd door het install()
commando gebruiken deze handtekening (met enkele ongedocumenteerde opties voor intern gebruik).
file(LOCK <path> )
Vergrendel een bestand gespecificeerd door <path>
als er geen DIRECTORY
optie aanwezig is en bestand<path>/cmake.lock
anders. Bestand wordt vergrendeld voor bereik gedefinieerd door de optieGUARD
(standaardwaarde is PROCESS
). RELEASE
optie kan worden gebruikt om bestand expliciet te ontgrendelen. Als optie TIMEOUT
niet is opgegeven, zal CMake wachten tot vergrendeling succesvol is of totdat er een fatale fout optreedt. Als TIMEOUT
is ingesteld op0
zal vergrendeling één keer worden geprobeerd en zal het resultaat onmiddellijk worden gerapporteerd. AlsTIMEOUT
niet 0
is, zal CMake proberen het bestand te vergrendelen voor de periode die is opgegeven door de waarde <seconds>
. Eventuele fouten zullen als fataal worden geïnterpreteerd als er geenRESULT_VARIABLE
optie is. Anders wordt het resultaat opgeslagen in <variable>
en wordt 0
bij succes of een foutmelding bij een fout.
merk op dat lock adviserend is – er is geen garantie dat andere processen dit slot zullen respecteren, dat wil zeggen dat lock twee of meer cmake-instanties synchroniseert en een aantal aanpasbare bronnen deelt. Soortgelijke logica toegepast op DIRECTORY
optie-het vergrendelen van de bovenliggende map voorkomt niet dat andere LOCK
commando ‘ s een Child map of bestand vergrendelen.
tweemaal proberen een bestand te vergrendelen is niet toegestaan. Alle tussenliggende mappen en bestanden zelf zullen worden aangemaakt als ze niet bestaan. GUARD
en TIMEOUT
opties genegeerd bij RELEASE
operatie.