File manipulation command.
file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)
napište <content>
do souboru s názvem <filename>
. Pokud soubor neexistuje, bude vytvořen. Pokud soubor již existuje, režim WRITE
jej přepíše a režim APPEND
se připojí na konec.Budou vytvořeny všechny adresáře v cestě určené <filename>
, které neexistujíexistují.
pokud je soubor sestavovacím vstupem, použijte příkaz configure_file()
k aktualizaci souboru pouze při změně jeho obsahu.
file(READ <filename> <variable> )
Přečtěte si obsah ze souboru s názvem <filename>
a uložte jej do<variable>
. Volitelně začněte od daného <offset>
apřečtěte maximálně <max-in>
bajtů. Volba HEX
způsobí, že data budou převedena na hexadecimální reprezentaci (užitečné pro binární data).
file(STRINGS <filename> <variable> )
analyzujte seznam ASCII řetězců z <filename>
a uložte je do<variable>
. Binární data v souboru jsou ignorována. Znaky návratu vozíku (\r
, CR) jsou ignorovány. Možnosti jsou:
LENGTH_MAXIMUM <max-len>
zvažte pouze řetězce nejvýše dané délky.
LENGTH_MINIMUM <min-len>
zvažte pouze řetězce alespoň dané délky.
LIMIT_COUNT <max-num>
Omezte počet odlišných řetězců, které mají být extrahovány.
LIMIT_INPUT <max-in>
Omezte počet vstupních bajtů pro čtení ze souboru.
LIMIT_OUTPUT <max-out>
Omezte počet celkových bajtů pro uložení v <variable>
.
NEWLINE_CONSUME
považujte znaky nového řádku (\n
, LF) za součást obsahu řetězce namísto ukončení na nich.
NO_HEX_CONVERSION
soubory Intel Hex a Motorola s-record jsou při čtení automaticky převáděny, pokud není tato možnost zadána.
REGEX <regex>
zvažte pouze řetězce, které odpovídají danému regulárnímu výrazu.
ENCODING <encoding-type>
zvažte řetězce daného kódování. V současné době podporované kódování jsou:UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Pokud možnost kódování není poskytnuta a soubor má značku pořadí bajtů, bude možnost kódování zrušena, aby respektovala značku pořadí bajtů.
například kód
file(STRINGS myfile.txt myfile)
uloží seznam do proměnné myfile
, ve které je každá položka řádkemze vstupního souboru.
file(<HASH> <filename> <variable>)
Vypočítejte kryptografický hash obsahu <filename>
a uložte jej do <variable>
. Podporované názvy algoritmů <HASH>
jsou uvedeny příkazem string(<HASH>).
file(GLOB <variable> )file(GLOB_RECURSE <variable> )
Vygenerujte seznam souborů, které odpovídají <globbing-expressions>
a uložte je do <variable>
. Globbingové výrazy jsou podobnépravidelné výrazy, ale mnohem jednodušší. Pokud je nastaven příznak RELATIVE
, budou výsledky vráceny jako relativní cesty k dané cestě. Výsledky budou uspořádány lexikograficky.
ve výchozím nastavení GLOB
seznamy adresářů-adresáře jsou ve výsledku vynechány, pokud jeLIST_DIRECTORIES
nastaveno na hodnotu false.
Poznámka
nedoporučujeme používat GLOB ke shromažďování seznamu zdrojových souborů z vašeho zdrojového stromu. Pokud žádné CMakeLists.soubor txt se změní, když je zdroj připojen nebo odstraněn, pak vygenerovaný systém sestavení nemůže vědět, kdy požádat CMake o regeneraci.
příklady globbingových výrazů zahrnují:
*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt
režim GLOB_RECURSE
bude procházet všemi podadresáři odpovídajícího adresáře a odpovídat souborům. Podadresáře, které jsou symlinksare prochází pouze pokud FOLLOW_SYMLINKS
je dána nebo politikaCMP0009
není nastavena na NEW
.
ve výchozím nastavení GLOB_RECURSE
vynechá adresáře ze seznamu výsledků-nastaveníLIST_DIRECTORIES
do true přidá adresáře do seznamu výsledků.Pokud je zadáno FOLLOW_SYMLINKS
nebo pokud politika CMP0009
není nastavena naOLD
, pak LIST_DIRECTORIES
považuje symbolické odkazy za adresáře.
příklady rekurzivního globbingu zahrnují:
/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)
přesuňte soubor nebo adresář v souborovém systému z <oldname>
na<newname>
a atomicky nahradíte cíl.
file(REMOVE )file(REMOVE_RECURSE )
odeberte dané soubory. Režim REMOVE_RECURSE
odstraní daný režimsoubory a adresáře, také neprázdné adresáře. Pokud soubor agiven neexistuje, nevydá se žádná chyba.
file(MAKE_DIRECTORY )
Vytvořte dané adresáře a jejich rodiče podle potřeby.
file(RELATIVE_PATH <variable> <directory> <file>)
Vypočítejte relativní cestu z <directory>
do <file>
a uložte ji do <variable>
.
file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)
režim TO_CMAKE_PATH
převede nativní <path>
na cmake-stylepath s lomítky vpřed (/
). Vstup může být jedna cesta nebo asystémová vyhledávací cesta jako $ENV{PATH}
. Cesta hledání bude převedena na seznam ve stylu cmake oddělený ;
znaky.
režim TO_NATIVE_PATH
převede styl cmake <path>
na nativní cestu s lomítky specifickými pro platformu (\
v systému Windows a /
jinde).
vždy použijte dvojité uvozovky kolem <path>
, abyste se ujistili, že je tento příkaz považován za jediný argument.
file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )
režim DOWNLOAD
stáhne dané <url>
na lokální <file>
.Režim UPLOAD
nahraje lokální <file>
na daný <url>
.
volby obou DOWNLOAD
a UPLOAD
jsou:
INACTIVITY_TIMEOUT <seconds>
ukončete operaci po určité době nečinnosti.
LOG <variable>
Uložte protokol operace čitelný pro člověka do proměnné.
SHOW_PROGRESS
tiskněte informace o průběhu jako stavové zprávy, dokud operace neskončí.
STATUS <variable>
uloží výsledný stav operace do proměnné.Stav je ;
oddělený seznam délky 2.První prvek je číselná návratová hodnota operace a druhý prvek je hodnota řetězce pro chybu.Číselná chyba 0
znamená, že při operaci nedošlo k žádné chybě.
TIMEOUT <seconds>
ukončete operaci po uplynutí určitého celkového času.
USERPWD <username>:<password>
nastavte uživatelské jméno a heslo pro provoz.
HTTPHEADER <HTTP-header>
HTTP hlavička pro provoz. Suboption lze opakovat několikrát.
další možnosti pro DOWNLOAD
jsou:
EXPECTED_HASH ALGO=<value>
ověřte, zda stažený obsah hash odpovídá očekávané hodnotě, kde
ALGO
je jedním z algoritmů podporovanýchfile(<HASH>)
.Pokud se neshoduje, operace selže s chybou.
EXPECTED_MD5 <value>
Historická krátká ruka pro EXPECTED_HASH MD5=<value>
.
TLS_VERIFY <ON|OFF>
Určete, zda chcete ověřit certifikát serveru pro https://
adresy URL.Výchozí je neověřit.
TLS_CAINFO <file>
zadejte vlastní soubor certifikační autority pro https://
adresy URL.
pro https://
adresy URL CMake musí být postaveny s podporou OpenSSL. TLS/SSL
certifikáty nejsou ve výchozím nastavení kontrolovány. Nastavte TLS_VERIFY
na ON
zaškrtněte certifikáty a / nebo použijte EXPECTED_HASH
k ověření staženého obsahu.Pokud není zadána žádná volba TLS
, CMake zkontroluje proměnnéCMAKE_TLS_VERIFY
a CMAKE_TLS_CAINFO
.
file(TIMESTAMP <filename> <variable> )
Vypočítejte řetězcovou reprezentaci doby modifikace <filename>
a uložte ji do <variable>
. Pokud příkaz nebude schopen získat proměnná atimestamp bude nastavena na prázdný řetězec („“).
viz příkaz string(TIMESTAMP)
pro dokumentaci voleb <format>
a UTC
.
file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )
Vygenerujte výstupní soubor pro každou konfiguraci sestavení podporovanou aktuálnímCMake Generator
. Vyhodnoťtegenerator expressions
ze vstupního obsahu a vytvořte výstupní obsah. Možnosti jsou:
CONDITION <condition>
Vygenerujte výstupní soubor pro konkrétní konfiguraci, pouze pokudpodmínka je pravdivá. Podmínka musí být buď 0
nebo 1
po vyhodnocení generátorových výrazů.
CONTENT <content>
použijte explicitně zadaný obsah jako vstup.
INPUT <input-file>
jako vstup použijte obsah z daného souboru.Relativní cesta je zpracována s ohledem na hodnotuCMAKE_CURRENT_SOURCE_DIR
. Viz zásady CMP0070
.
OUTPUT <output-file>
zadejte název výstupního souboru, který chcete vygenerovat. Použijte generátorové expressionsupříklad $<CONFIG>
pro zadání výstupního souboru specifického pro konfiguraci. Více konfigurací může generovat stejný výstupní soubor pouze v případě, že generovaný obsah je totožný. V opačném případě musí <output-file>
vyhodnotit jedinečný název pro každou konfiguraci.Relativní cesta (po vyhodnocení výrazů generátoru) je zpracovánas ohledem na hodnotu CMAKE_CURRENT_BINARY_DIR
.Viz zásady CMP0070
.
musí být zadána přesně jedna volba CONTENT
nebo INPUT
. Konkrétní souborOUTPUT
může být pojmenován nejvýše jedním vyvoláním file(GENERATE)
.Generované soubory jsou upraveny a jejich časové razítko aktualizováno na následujících cmakeruns pouze tehdy, pokud se změní jejich obsah.
Všimněte si také, že file(GENERATE)
nevytváří výstupní soubor až do fáze generování. Výstupní soubor ještě nebude zapsán, když se příkazfile(GENERATE)
vrátí, je zapsán až po zpracování souborů CMakeLists.txt
projektu.
file(<COPY|INSTALL> <files>... DESTINATION <dir> ] )
podpis COPY
kopíruje soubory, adresáře a symbolické odkazy do složky adestination. Relativní vstupní cesty jsou vyhodnoceny s ohledem na aktuální zdrojový adresář a relativní cíl je vyhodnocen s ohledem na aktuální adresář sestavení. Copyingpreserves vstupní soubor časová razítka, a optimalizuje se soubor, pokud existsat cíl se stejným časovým razítkem. Kopírování zachovává inputpermissions, pokud nejsou zadána explicitní oprávnění nebo NO_SOURCE_PERMISSIONS
(výchozí je USE_SOURCE_PERMISSIONS
).
viz příkaz install(DIRECTORY)
pro dokumentaci povolení, FILES_MATCHING
, PATTERN
, REGEX
, aEXCLUDE
možnosti. Kopírování adresářů zachovává strukturujejich obsahu, i když jsou volby použity k výběru podmnožiny souborů.
podpis INSTALL
se mírně liší od COPY
: tiskne statusové zprávy (s výhradou proměnné CMAKE_INSTALL_MESSAGE
) a NO_SOURCE_PERMISSIONS
je výchozí.Instalační skripty generované příkazem install()
použijte tento podpis (s některými neregistrovanými možnostmi pro interní použití).
file(LOCK <path> )
Uzamkněte soubor zadaný <path>
, pokud není k dispozici žádná volba DIRECTORY
a soubor<path>/cmake.lock
jinak. Soubor bude uzamčen pro rozsah definovaný volbouGUARD
(výchozí hodnota je PROCESS
). RELEASE
volba může být použitak explicitně odemknout soubor. Pokud volba TIMEOUT
není zadána, CMake bude čekat, dokud nebude zámek úspěšný nebo dokud nedojde k fatální chybě. Pokud je TIMEOUT
nastaveno na0
zámek bude jednou vyzkoušen a výsledek bude okamžitě nahlášen. PokudTIMEOUT
není 0
CMake se pokusí zamknout soubor pro období zadanépodle hodnoty <seconds>
. Jakékoli chyby budou interpretovány jako fatální, pokud neexistuje žádná možnostRESULT_VARIABLE
. V opačném případě bude výsledek uložen v <variable>
a bude 0
při úspěchu nebo chybové zprávě při selhání.
Všimněte si, že lock je poradní-neexistuje žádná záruka, že ostatní procesy budou tento zámek respektovat, tj. zámek synchronizuje dvě nebo více instancí CMake sdílejících některé modifikovatelné zdroje. Podobná logika aplikovaná na možnost DIRECTORY
– zamykání nadřazeného adresáře nezabrání jiným příkazům LOCK
uzamknout adresář nebo soubor anychild.
Pokus o uzamčení souboru dvakrát není povolen. Jakékoli mezilehlé adresáře asoubor sám bude vytvořen, pokud neexistují. GUARD
a TIMEOUT
volby ignorovány při operaci RELEASE
.