polecenie manipulacji plikiem.
file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)
Zapisz <content>
do pliku o nazwie <filename>
. Jeśli plik nie istnieje, zostanie utworzony. Jeśli plik już istnieje, tryb WRITE
nadpisze go, a tryb APPEND
zostanie dołączony do końca.Wszystkie katalogi w ścieżce określonej przez <filename>
, które nie są widoczne, zostaną utworzone.
jeśli plik jest wejściem kompilacji, użyj polecenia configure_file()
, aby zaktualizować plik tylko wtedy, gdy jego zawartość się zmieni.
file(READ <filename> <variable> )
odczytaj zawartość z pliku o nazwie <filename>
i zapisz ją w pliku<variable>
. Opcjonalnie zacznij od podanego <offset>
i co najwyżej <max-in>
bajtów. Opcja HEX
powoduje, że dane są konwertowane na reprezentację szesnastkową (przydatną dla danych binarnych).
file(STRINGS <filename> <variable> )
parsuje listę ciągów ASCII z <filename>
i przechowuje ją w<variable>
. Dane binarne w pliku są ignorowane. Znaki powrotu karetki (\r
, CR) są ignorowane. Opcje są następujące:
LENGTH_MAXIMUM <max-len>
rozważ tylko ciągi o co najwyżej określonej długości.
LENGTH_MINIMUM <min-len>
rozważaj tylko ciągi o co najmniej określonej długości.
LIMIT_COUNT <max-num>
Ogranicz liczbę wyodrębnionych łańcuchów.
LIMIT_INPUT <max-in>
Ogranicz liczbę bajtów wejściowych do odczytu z pliku.
LIMIT_OUTPUT <max-out>
Ogranicz liczbę wszystkich bajtów do przechowywania w <variable>
.
NEWLINE_CONSUME
traktuj znaki nowej linii (\n
, LF) jako część zawartości łańcucha zamiast kończenia na nich.
NO_HEX_CONVERSION
pliki Intel Hex I Motorola s-record są automatycznie konwertowane do odczytu, chyba że podano tę opcję.
REGEX <regex>
rozważaj tylko łańcuchy, które pasują do podanego wyrażenia regularnego.
ENCODING <encoding-type>
rozważ ciągi danego kodowania. Obecnie obsługiwane kodowania to: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Jeśli opcja kodowania nie jest podana, a plik ma znak kolejności bajtów, opcja kodowania będzie domyślnie zgodna ze znakiem kolejności bajtów.
na przykład kod
file(STRINGS myfile.txt myfile)
przechowuje listę w zmiennej myfile
, w której każdy element jest linefrom z pliku wejściowego.
file(<HASH> <filename> <variable>)
Oblicz kryptograficzny hash zawartości <filename>
i zapisz go w <variable>
. Obsługiwane nazwy algorytmu <HASH>
są nazwami wymienionymi przez polecenie string(<HASH>).
file(GLOB <variable> )file(GLOB_RECURSE <variable> )
generuje listę plików, które pasują do <globbing-expressions>
i zapisuje ją do <variable>
. Wyrażenia globbingowe są podobne do wyrażeń toregularnych, ale znacznie prostsze. Jeśli znacznik RELATIVE
jest określony, wyniki zostaną zwrócone jako ścieżki względne do danej ścieżki. Wyniki zostaną uporządkowane leksykograficznie.
domyślnie GLOB
listuje Katalogi – Katalogi są pomijane, jeśliLIST_DIRECTORIES
ma wartość false.
Uwaga
nie zalecamy używania GLOB do zbierania listy plików źródłowych z drzewa źródeł. Jeśli nie ma Cmakelistów.plik TXT zmienia się po dodaniu lub usunięciu źródła, a wygenerowany system kompilacji nie może wiedzieć, kiedy Mask CMake do regeneracji.
przykładowe wyrażenia globbingowe obejmują:
*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt
tryb GLOB_RECURSE
przejrzy wszystkie podkatalogi katalogu i dopasuje pliki. Podkatalogi, które są symlinkami, są przeszukiwane tylko wtedy, gdy podano FOLLOW_SYMLINKS
lubCMP0009
nie jest ustawione na NEW
.
domyślnie GLOB_RECURSE
pomija katalogi z listy wyników-ustawienieLIST_DIRECTORIES
na true dodaje katalogi do listy wyników.Jeśli podano FOLLOW_SYMLINKS
lub CMP0009
nie jest ustawione naOLD
, to LIST_DIRECTORIES
traktuje dowiązania symboliczne jako katalogi.
przykłady rekurencyjnego globsowania obejmują:
/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)
Przenieś plik lub katalog w systemie plików z <oldname>
do<newname>
, zastępując miejsce docelowe atomowo.
file(REMOVE )file(REMOVE_RECURSE )
Usuń podane pliki. Tryb REMOVE_RECURSE
usunie pliki givenfiles i katalogi, również niepuste katalogi. Jeśli plik agiven nie istnieje, nie jest emitowany żaden błąd.
file(MAKE_DIRECTORY )
Utwórz podane katalogi i ich rodziców w razie potrzeby.
file(RELATIVE_PATH <variable> <directory> <file>)
Oblicz ścieżkę względną z <directory>
do <file>
i zachowaj ją w <variable>
.
file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)
tryb TO_CMAKE_PATH
konwertuje natywną ścieżkę <path>
na ścieżkę cmake-stylepath z ukośnikami do przodu (/
). Wejście Może być pojedynczą ścieżką lub ścieżką wyszukiwania systemu, jak $ENV{PATH}
. Ścieżka wyszukiwania zostanie przekonwertowana na Listę w stylu cmake oddzieloną znakami ;
.
tryb TO_NATIVE_PATH
konwertuje styl cmake <path>
na nativepath z ukośnikami specyficznymi dla platformy (\
w systemie Windows i /
gdzie indziej).
Zawsze używaj podwójnych cudzysłowów wokół <path>
, aby mieć pewność, że jest traktowany jako pojedynczy argument tego polecenia.
file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )
tryb DOWNLOAD
pobiera podaną <url>
do lokalnego <file>
.Tryb UPLOAD
wysyła lokalny <file>
do danego <url>
.
opcje dla obu DOWNLOAD
i UPLOAD
są:
INACTIVITY_TIMEOUT <seconds>
Zakończ operację po okresie bezczynności.
LOG <variable>
przechowuje czytelny dla człowieka dziennik operacji w zmiennej.
SHOW_PROGRESS
wypisuje informacje o postępach w postaci komunikatów o stanie do momentu zakończenia operacji.
STATUS <variable>
przechowuj wynikowy status operacji w zmiennej.Status jest rozdzieloną listą ;
o długości 2.Pierwszy element jest numeryczną wartością zwracaną dla operacji, a drugi element jest wartością łańcuchową błędu.0
błąd liczbowy oznacza brak błędu w operacji.
TIMEOUT <seconds>
Zakończ operację po upływie określonego całkowitego czasu.
USERPWD <username>:<password>
Ustaw nazwę użytkownika i hasło do operacji.
HTTPHEADER <HTTP-header>
nagłówek HTTP do operacji. Podwzgórze może być powtórzone kilka razy.
dodatkowymi opcjami do DOWNLOAD
są:
EXPECTED_HASH ALGO=<value>
sprawdź, czy pobrany Skrót zawartości odpowiada wartości oczekiwanej, gdzie
ALGO
jest jednym z algorytmów obsługiwanych przezfile(<HASH>)
.Jeśli nie pasuje, operacja zakończy się błędem.
EXPECTED_MD5 <value>
historyczny skrót dla EXPECTED_HASH MD5=<value>
.
TLS_VERIFY <ON|OFF>
Określ, czy należy zweryfikować certyfikat serwera pod kątem adresów URL https://
.Domyślną wartością jest brak weryfikacji.
TLS_CAINFO <file>
Określ niestandardowy plik urzędu certyfikacji dla adresów URL https://
.
dla https://
adresów URL CMake musi być zbudowany z obsługą OpenSSL. TLS/SSL
certyfikaty nie są domyślnie sprawdzane. Ustaw TLS_VERIFY
na ON
, aby sprawdzić certyfikaty i / lub użyj EXPECTED_HASH
, aby zweryfikować pobraną zawartość.Jeśli nie podano żadnej z opcji TLS
, CMake sprawdzi odpowiednio zmienneCMAKE_TLS_VERIFY
i CMAKE_TLS_CAINFO
.
file(TIMESTAMP <filename> <variable> )
Oblicz ciąg znaków czasu modyfikacji <filename>
i zapisz go w <variable>
. Jeśli polecenie nie będzie w stanie uzyskać atimestamp zmienna zostanie ustawiona na pusty łańcuch („”).
Zobacz polecenie string(TIMESTAMP)
, aby uzyskać dokumentację opcji <format>
i UTC
.
file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )
generuje plik wyjściowy dla każdej konfiguracji kompilacji obsługiwanej przez bieżącąCMake Generator
. Obliczgenerator expressions
z zawartości wejściowej, aby wygenerować zawartość wyjściową. Opcje są następujące:
CONDITION <condition>
generuje plik wyjściowy dla konkretnej konfiguracji tylko wtedy, gdy warunek jest prawdziwy. Warunek musi być 0
lub 1
po obliczeniu wyrażeń generatora.
CONTENT <content>
użyj treści podanych jawnie jako danych wejściowych.
INPUT <input-file>
użyj zawartości z podanego pliku jako wejścia.Ścieżka względna jest traktowana w odniesieniu do wartościCMAKE_CURRENT_SOURCE_DIR
. Zobacz politykę CMP0070
.
OUTPUT <output-file>
Określ nazwę pliku wyjściowego do wygenerowania. Użyj wyrażeń generatora, takich jak $<CONFIG>
, aby określić nazwę pliku wyjściowego specyficzną dla konfiguracji. Wiele konfiguracji może generować tylko ten sam plik wyjściowyjeśli wygenerowana zawartość jest identyczna. W przeciwnym razie <output-file>
musi obliczyć unikalną nazwę dla każdej konfiguracji.Ścieżka względna (po obliczeniu wyrażeń generatora) jest traktowana względem wartości CMAKE_CURRENT_BINARY_DIR
.Zobacz politykę CMP0070
.
należy podać dokładnie jedną opcję CONTENT
lub INPUT
. Konkretny plikOUTPUT
może być nazwany przez co najwyżej jedno wywołanie file(GENERATE)
.Wygenerowane pliki są modyfikowane, a ich znacznik czasu aktualizowany na kolejnych cmakerunach tylko wtedy, gdy ich zawartość zostanie zmieniona.
zauważ również, że file(GENERATE)
nie tworzy pliku wyjściowego aż do fazy generowania. Plik wyjściowy nie zostanie jeszcze zapisany, gdy powróci poleceniefile(GENERATE)
, jest zapisywany tylko po przetworzeniu wszystkich plików CMakeLists.txt
projektu.
file(<COPY|INSTALL> <files>... DESTINATION <dir> ] )
podpis COPY
kopiuje pliki, katalogi i dowiązania symboliczne do folderu adestination. Względne ścieżki wejściowe są oceniane w odniesieniu do bieżącego katalogu źródłowego, a względne miejsce docelowe jest oceniane w odniesieniu do bieżącego katalogu kompilacji. Kopiowanie zachowuje znaczniki czasu pliku wejściowego i optymalizuje plik, jeśli istnieje w miejscu docelowym z tym samym znacznikiem czasu. Kopiowanie zachowuje wejścia, chyba że podano wyraźne uprawnienia lub NO_SOURCE_PERMISSIONS
(domyślnie jest to USE_SOURCE_PERMISSIONS
).
zapoznaj się z poleceniem install(DIRECTORY)
, FILES_MATCHING
, PATTERN
, REGEX
, i EXCLUDE
opcji. Kopiowanie katalogów zachowuje strukturę ich zawartości, nawet jeśli do wyboru podzbioru plików używane są opcje.
sygnatura INSTALL
różni się nieco od COPY
: drukuje wiadomości status (podlegające zmiennej CMAKE_INSTALL_MESSAGE
), a NO_SOURCE_PERMISSIONS
jest domyślna.Skrypty instalacyjne generowane przez polecenie install()
używają tej sygnatury (z niektórymi nieudokumentowanymi opcjami do użytku wewnętrznego).
file(LOCK <path> )
Zablokuj plik określony przez <path>
, jeśli nie ma opcji DIRECTORY
, a plik<path>/cmake.lock
w przeciwnym razie. Plik zostanie zablokowany dla zakresu zdefiniowanego przez opcjęGUARD
(wartość domyślna to PROCESS
). RELEASE
można użyć opcji, aby jawnie odblokować plik . Jeśli opcja TIMEOUT
nie jest określona, CMake będzie czekać, aż blokada się powiedzie lub wystąpi błąd krytyczny. JeśliTIMEOUT
jest ustawione na 0
blokada zostanie wypróbowana raz, a wynik zostanie natychmiast zgłoszony. JeśliTIMEOUT
nie jest 0
CMake spróbuje zablokować plik na okres określony przez wartość <seconds>
. Wszelkie błędy będą interpretowane jako fatalne, jeśli nie ma opcjiRESULT_VARIABLE
. W przeciwnym razie wynik będzie przechowywany w <variable>
i będzie 0
W przypadku sukcesu lub Komunikatu o błędzie w przypadku niepowodzenia.
zauważ, że lock ma charakter doradczy – nie ma gwarancji, że inne procesy będą go obsługiwać, np. lock synchronizuje dwie lub więcej instancji CMake sharingsome modyfikowalne zasoby. Podobna logika zastosowana do DIRECTORY
opcja-blokowanie katalogu nadrzędnego nie uniemożliwia innym poleceniom LOCK
zablokowania dowolnego katalogu lub pliku.
dwukrotne blokowanie pliku nie jest dozwolone. Wszelkie pośrednie katalogi i sam plik zostaną utworzone, jeśli nie istnieją. Opcje GUARD
i TIMEOUT
ignorowane podczas operacji RELEASE
.