plik¶
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
dołączy do końca.(Jeśli plik jest wejściem kompilacji, użyj polecenia configure_file()
, aby zaktualizować plik tylko wtedy, gdy zmieni się jego zawartość.)
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 ciągi, 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(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> <filename> <variable>)
Oblicz kryptograficzny hash zawartości <filename>
i zachowaj go w <variable>
.
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. Nie jest określona konkretna kolejność wyników. Jeśli kolejność jest ważna, to należy jawnie usunąć listę (np. za pomocą polecenia list(SORT)
).
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ą przeglądane 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, także niepuste katalogi
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 zarówno DOWNLOAD
, jak 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.
dodatkowymi opcjami do DOWNLOAD
są:
EXPECTED_HASH ALGO=<value>
sprawdź, czy hash pobranej zawartości odpowiada wartości oczekiwanej, gdzie
ALGO
jest jednym zMD5
,SHA1
,SHA224
,SHA256
,SHA384
, lubSHA512
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 dla 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> )
Generowanie pliku wyjściowego 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>
wygenerować plik wyjściowy dla konkretnej konfiguracji tylko jeżeli warunek jest true. Warunek musi być 0
lub 1
po obliczeniu wyrażeń generatora.
CONTENT <content>
użyj treści podanych jawnie jako wejście.
INPUT <input-file>
użyj zawartości z podanego pliku jako wejścia.
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.
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 przy kolejnych uruchomieniach cmake tylko wtedy, gdy ich zawartość uległa zmianie.
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
).
Zobacz polecenie install(DIRECTORY)
w celu uzyskania dokumentacji, 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
i 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śli TIMEOUT
jest ustawione na0
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
.