Comando de manipulación de archivos.
file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)
Escribir <content>
en un archivo llamado <filename>
. Si el archivo no existe, se creará. Si el archivo ya existe, el modo WRITE
lo sobrescribirá y el modo APPEND
se añadirá al final.Se crearán todos los directorios en la ruta especificada por <filename>
que no existan.
Si el archivo es una entrada de compilación, utilice el comando configure_file()
para actualizar el archivo solo cuando cambie su contenido.
file(READ <filename> <variable> )
Leer el contenido de un archivo llamado <filename>
y guárdelo en un<variable>
. Opcionalmente, comience desde los <offset>
dados y lea como máximo <max-in>
bytes. La opción HEX
hace que los datos se conviertan en una representación hexadecimal (útil para datos binarios).
file(STRINGS <filename> <variable> )
Analiza una lista de cadenas ASCII de <filename>
y guárdala en<variable>
. Los datos binarios en el archivo se ignoran. Los caracteres de retorno de carro(\r
, CR) se ignoran. Las opciones son:
LENGTH_MAXIMUM <max-len>
Considere solo cadenas de una longitud determinada como máximo.
LENGTH_MINIMUM <min-len>
Considere solo cadenas de al menos una longitud determinada.
LIMIT_COUNT <max-num>
Limite el número de cadenas distintas que se extraerán.
LIMIT_INPUT <max-in>
Limite el número de bytes de entrada a leer del archivo.
LIMIT_OUTPUT <max-out>
Limite el número de bytes totales a almacenar en <variable>
.
NEWLINE_CONSUME
Trate los caracteres de nueva línea (\n
, LF) como parte del contenido de cadena en lugar de terminarlos.
NO_HEX_CONVERSION
Los archivos Intel Hex y Motorola S-record se convierten automáticamente en archivos binarios durante la lectura, a menos que se proporcione esta opción.
REGEX <regex>
Considere solo cadenas que coincidan con la expresión regular dada.
ENCODING <encoding-type>
Considere cadenas de una codificación dada. Las codificaciones soportadas actualmente son: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Si no se proporciona la opción de CODIFICACIÓN y el archivo tiene una Marca de Orden de Bytes, la opción de CODIFICACIÓN se ajustará de forma predeterminada para respetar la Marca de Orden de bytes.
Por ejemplo, el código
file(STRINGS myfile.txt myfile)
almacena una lista en la variable myfile
en la que cada elemento es una línea del archivo de entrada.
file(<HASH> <filename> <variable>)
Calcule un hash criptográfico del contenido de <filename>
y guárdelo en <variable>
. Los nombres de algoritmo <HASH>
admitidos son los enumerados por el comando string(<HASH>).
file(GLOB <variable> )file(GLOB_RECURSE <variable> )
Genere una lista de archivos que coincidan con <globbing-expressions>
y guárdela en <variable>
. Las expresiones Globbing son expresiones toregulares similares, pero mucho más simples. Si se especifica la marca RELATIVE
, los resultados se devolverán como rutas relativas a la ruta dada. Los resultados se ordenarán lexicográficamente.
De forma predeterminada GLOB
listas de directorios: los directorios se omiten en el resultado siLIST_DIRECTORIES
se establece en false.
Nota
No recomendamos usar GLOB para recopilar una lista de archivos fuente de su árbol de fuentes. Si no hay listas de fabricantes.el archivo txt cambia cuando se agrega o elimina una fuente, el sistema de compilación generado no puede saber cuándo se debe realizar la regeneración de CMake.
Los ejemplos de expresiones globulares incluyen:
*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt
El modo GLOB_RECURSE
recorrerá todos los subdirectorios del directorio coincidente y coincidirá con los archivos. Los subdirectorios que son enlaces simbólicos solo se recorren si se da FOLLOW_SYMLINKS
o si la políticaCMP0009
no se establece en NEW
.
De forma predeterminada GLOB_RECURSE
omite los directorios de la lista de resultados: la configuraciónLIST_DIRECTORIES
a true agrega directorios a la lista de resultados.Si se da FOLLOW_SYMLINKS
o la política CMP0009
no se establece enOLD
, LIST_DIRECTORIES
trata los enlaces simbólicos como directorios.
Los ejemplos de globeo recursivo incluyen:
/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)
Mueva un archivo o directorio dentro de un sistema de archivos de <oldname>
a<newname>
, reemplazando el destino atómicamente.
file(REMOVE )file(REMOVE_RECURSE )
Quitar el dado archivos. El modo REMOVE_RECURSE
eliminará los givenfiles y directorios, también directorios no vacíos. No se emite ningún error si el archivo agiven no existe.
file(MAKE_DIRECTORY )
Cree los directorios dados y sus padres según sea necesario.
file(RELATIVE_PATH <variable> <directory> <file>)
Calcule la ruta relativa de <directory>
a <file>
y guárdela en <variable>
.
file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)
El modo TO_CMAKE_PATH
convierte un <path>
nativo en una ruta de estilo cmake con barras oblicuas (/
). La entrada puede ser una ruta única o una ruta de búsqueda de un sistema como $ENV{PATH}
. Una ruta de búsqueda se convertirá a una lista de estilo cmake separada por ;
caracteres.
El modo TO_NATIVE_PATH
convierte un estilo cmake <path>
en un nativepath con barras inclinadas específicas de la plataforma (\
en Windows y /
en otros lugares).
Siempre use comillas dobles alrededor de <path>
para asegurarse de que se trate como un solo argumento de este comando.
file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )
El modo DOWNLOAD
descarga el <url>
dado a un <file>
local.El modo UPLOAD
carga un <file>
local a un <url>
dado.
Las opciones de DOWNLOAD
y UPLOAD
son:
INACTIVITY_TIMEOUT <seconds>
Poner fin a la operación tras un período de inactividad.
LOG <variable>
Almacene un registro legible por humanos de la operación en una variable.
SHOW_PROGRESS
Imprima la información de progreso como mensajes de estado hasta que se complete la operación.
STATUS <variable>
Almacene el estado resultante de la operación en una variable.El estado es una lista separada ;
de longitud 2.El primer elemento es el valor de retorno numérico de la operación, y el segundo elemento es un valor de cadena para el error.Un error numérico 0
significa que no hay error en la operación.
TIMEOUT <seconds>
Termine la operación después de que haya transcurrido un tiempo total dado.
USERPWD <username>:<password>
Establezca el nombre de usuario y la contraseña para el funcionamiento.
HTTPHEADER <HTTP-header>
Encabezado HTTP para el funcionamiento. La subopción se puede repetir varias veces.
Las opciones adicionales a DOWNLOAD
son:
EXPECTED_HASH ALGO=<value>
Compruebe que el hash de contenido descargado coincide con el valor esperado, donde
ALGO
es uno de los algoritmos admitidos porfile(<HASH>)
.Si no coincide, la operación falla con un error.
EXPECTED_MD5 <value>
Mano corta histórica para EXPECTED_HASH MD5=<value>
.
TLS_VERIFY <ON|OFF>
Especifique si desea verificar el certificado de servidor para URL https://
.El valor predeterminado es no verificar.
TLS_CAINFO <file>
Especifique un archivo de autoridad de certificación personalizado para URL https://
.
Para URL https://
CMake debe estar construido con soporte OpenSSL. TLS/SSL
los certificados no están marcados de forma predeterminada. Establezca TLS_VERIFY
en ON
para comprobar certificados y / o use EXPECTED_HASH
para verificar el contenido descargado.Si no se da ninguna opción TLS
, CMake comprobará las variablesCMAKE_TLS_VERIFY
y CMAKE_TLS_CAINFO
, respectivamente.
file(TIMESTAMP <filename> <variable> )
Calcular una representación de cadena del tiempo de modificación de <filename>
y almacenarlo en <variable>
. Si el comando no puede obtener la variable atimestamp se establecerá en la cadena vacía («»).
Vea el comando string(TIMESTAMP)
para la documentación de las opciones <format>
y UTC
.
file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )
Genere un archivo de salida para cada configuración de compilación soportada por el CMake Generator
actual. Evalúegenerator expressions
del contenido de entrada para producir el contenido de salida. Las opciones son:
CONDITION <condition>
Genere el archivo de salida para una configuración en particular solo si la condición es verdadera. La condición debe ser 0
o 1
después de evaluar las expresiones del generador.
CONTENT <content>
Utilice el contenido dado explícitamente como entrada.
INPUT <input-file>
Utilice el contenido de un archivo dado como entrada.Una ruta relativa se trata con respecto al valor deCMAKE_CURRENT_SOURCE_DIR
. Consulte la política CMP0070
.
OUTPUT <output-file>
Especifique el nombre del archivo de salida a generar. Utilice expresiones del generador como $<CONFIG>
para especificar un nombre de archivo de salida específico de la configuración. Varias configuraciones solo pueden generar el mismo archivo de salida si el contenido generado es idéntico. De lo contrario, <output-file>
debe evaluar un nombre único para cada configuración.Una ruta relativa (después de evaluar expresiones del generador) se trata con respecto al valor de CMAKE_CURRENT_BINARY_DIR
.Consulte la política CMP0070
.
Se debe dar exactamente una opción CONTENT
o INPUT
. Un archivoOUTPUT
específico puede ser nombrado como máximo con una invocación de file(GENERATE)
.Los archivos generados se modifican y su marca de tiempo se actualiza en cmakeruns posteriores solo si se cambia su contenido.
Tenga en cuenta también que file(GENERATE)
no crea el archivo de salida hasta la fase de generación. El archivo de salida aún no se habrá escrito cuando regrese el comandofile(GENERATE)
, se escribe solo después de procesar todos los archivos CMakeLists.txt
de un proyecto.
file(<COPY|INSTALL> <files>... DESTINATION <dir> ] )
La firma COPY
copia archivos, directorios y enlaces simbólicos a la carpeta adestination. Las rutas de entrada relativas se evalúan con respecto al directorio de origen actual, y se evalúa un destino relativo con respecto al directorio de compilación actual. La copia conserva las marcas de tiempo del archivo de entrada y optimiza un archivo si existe en el destino con la misma marca de tiempo. La copia conserva las emisiones de entrada a menos que se den permisos explícitos o NO_SOURCE_PERMISSIONS
(el valor predeterminado es USE_SOURCE_PERMISSIONS
).
Consulte el comando install(DIRECTORY)
para la documentación de las emisiones, FILES_MATCHING
, PATTERN
, REGEX
, y opcionesEXCLUDE
. Copiar directorios preserva la estructura de su contenido incluso si se utilizan opciones para seleccionar un subconjunto de archivos.
La firma INSTALL
difiere ligeramente de COPY
: imprime mensajes de estado (sujetos a la variable CMAKE_INSTALL_MESSAGE
) y NO_SOURCE_PERMISSIONS
es el valor predeterminado.Los scripts de instalación generados por el comando install()
utilizan esta firma (con algunas opciones no documentadas para uso interno).
file(LOCK <path> )
Bloquee un archivo especificado por <path>
si no hay opción DIRECTORY
presente y archivo<path>/cmake.lock
de lo contrario. El archivo se bloqueará para el ámbito definido por la opciónGUARD
(el valor predeterminado es PROCESS
). la opción RELEASE
se puede utilizar para desbloquear el archivo de forma explícita. Si no se especifica la opción TIMEOUT
, CMake esperará hasta que el bloqueo tenga éxito o hasta que se produzca un error fatal. Si TIMEOUT
se establece en0
, el bloqueo se intentará una vez y el resultado se informará de inmediato. SiTIMEOUT
no es 0
, CMake intentará bloquear el archivo durante el período especificado por el valor <seconds>
. Cualquier error se interpretará como fatal si no hay una opciónRESULT_VARIABLE
. De lo contrario, el resultado se almacenará en <variable>
y será 0
en caso de éxito o mensaje de error en caso de error.
Tenga en cuenta que el bloqueo es un aviso – no hay garantía de que otros procesos respeten este bloqueo, es decir, bloquear sincronizar dos o más instancias de CMake compartiendo algunos recursos modificables. La lógica similar aplicada al directorio padre de bloqueo de opciones DIRECTORY
no impide que otros comandos LOCK
bloqueen cualquier directorio o archivo de un hijo.
No se permite intentar bloquear dos veces el archivo. Se crearán los directorios intermedios y el propio archivo si no existen. opciones GUARD
y TIMEOUT
ignoradas en la operación RELEASE
.