Commande de manipulation de fichier.
file(WRITE <filename> <content>...)file(APPEND <filename> <content>...)
Écrivez <content>
dans un fichier appelé <filename>
. Si le fichier n’existe pas, il sera créé. Si le fichier existe déjà, le mode WRITE
l’écrasera et le mode APPEND
s’ajoutera à la fin.Tous les répertoires du chemin spécifié par <filename>
qui n’existent pas seront créés.
Si le fichier est une entrée de compilation, utilisez la commande configure_file()
pour mettre à jour le fichier uniquement lorsque son contenu change.
file(READ <filename> <variable> )
Lisez le contenu d’un fichier appelé <filename>
et stockez-le dans un <variable>
. Éventuellement, commencez à partir de <offset>
et lisez au plus <max-in>
octets. L’option HEX
entraîne la conversion des données en une représentation hexadécimale (utile pour les données binaires).
file(STRINGS <filename> <variable> )
Analysez une liste de chaînes ASCII de <filename>
et stockez-la dans <variable>
. Les données binaires du fichier sont ignorées. Les caractères de retour chariot (\r
, CR) sont ignorés. Les options sont:
LENGTH_MAXIMUM <max-len>
Ne considérez que des chaînes d’au plus une longueur donnée.
LENGTH_MINIMUM <min-len>
Ne considérez que des chaînes d’au moins une longueur donnée.
LIMIT_COUNT <max-num>
Limite le nombre de chaînes distinctes à extraire.
LIMIT_INPUT <max-in>
Limite le nombre d’octets d’entrée à lire dans le fichier.
LIMIT_OUTPUT <max-out>
Limite le nombre total d’octets à stocker dans le <variable>
.
NEWLINE_CONSUME
Traitez les caractères de nouvelle ligne (\n
, LF) comme faisant partie du contenu de la chaîne au lieu de les terminer.
NO_HEX_CONVERSION
Les fichiers Intel Hex et Motorola S-record sont automatiquement convertis en binaire pendant la lecture, sauf si cette option est donnée.
REGEX <regex>
Ne considère que les chaînes qui correspondent à l’expression régulière donnée.
ENCODING <encoding-type>
Considérez les chaînes d’un codage donné. Les encodages actuellement pris en charge sont : UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. Si l’option d’ENCODAGE n’est pas fournie et que le fichier a une Marque d’ordre d’octets, l’option d’ENCODAGE sera par défaut pour respecter la Marque d’ordre d’octets.
Par exemple, le code
file(STRINGS myfile.txt myfile)
stocke une liste dans la variable myfile
dans laquelle chaque élément est une ligne à partir du fichier d’entrée.
file(<HASH> <filename> <variable>)
Calculez un hachage cryptographique du contenu de <filename>
et stockez-le dans un <variable>
. Les noms d’algorithme <HASH>
pris en charge sont ceux listés par la commande string (< HASH >).
file(GLOB <variable> )file(GLOB_RECURSE <variable> )
Générez une liste de fichiers qui correspondent au <globbing-expressions>
et stockez-le dans le <variable>
. Les expressions Globbing sont similaires àexcitations régulières, mais beaucoup plus simples. Si l’indicateur RELATIVE
est spécifié, les résultats seront renvoyés sous forme de chemins relatifs au chemin donné. Les résultats seront ordonnés lexicographiquement.
Par défaut GLOB
liste les répertoires – les répertoires sont omis dans le résultat si LIST_DIRECTORIES
est défini sur false.
Remarque
Nous ne recommandons pas d’utiliser GLOB pour collecter une liste de fichiers source à partir de votre arborescence source. Si aucun CMakeLists.le fichier txt change lorsqu’une source est ajoutée ou supprimée, le système de génération généré ne peut pas savoir quand demander à CMake de se régénérer.
Des exemples d’expressions globbing incluent:
*.cxx - match all files with extension cxx*.vt? - match all files with extension vta,...,vtzf.txt - match files f3.txt, f4.txt, f5.txt
Le mode GLOB_RECURSE
parcourra tous les sous-répertoires du répertoire correspondant et correspondra aux fichiers. Les sous-répertoires qui sont symlinks ne sont parcourus que si FOLLOW_SYMLINKS
est donné ou si la stratégie CMP0009
n’est pas définie sur NEW
.
Par défaut GLOB_RECURSE
omet les répertoires de la liste de résultats – définir LIST_DIRECTORIES
sur true ajoute des répertoires à la liste de résultats.Si FOLLOW_SYMLINKS
est donné ou si la stratégie CMP0009
n’est pas définie sur OLD
, alors LIST_DIRECTORIES
traite les liens symboliques comme des répertoires.
Des exemples de globulation récursive incluent:
/dir/*.py - match all python files in /dir and subdirectories
file(RENAME <oldname> <newname>)
Déplacez un fichier ou un répertoire dans un système de fichiers de <oldname>
à <newname>
, en remplaçant la destination de manière atomique.
file(REMOVE )file(REMOVE_RECURSE )
Supprimez les fichiers donnés. Le mode REMOVE_RECURSE
supprimera les fichiers et répertoires donnés, également des répertoires non vides. Aucune erreur n’est émise si un fichier donné n’existe pas.
file(MAKE_DIRECTORY )
Créez les répertoires donnés et leurs parents au besoin.
file(RELATIVE_PATH <variable> <directory> <file>)
Calculez le chemin relatif de a <directory>
à a <file>
et stockez-le dans le <variable>
.
file(TO_CMAKE_PATH "<path>" <variable>)file(TO_NATIVE_PATH "<path>" <variable>)
Le mode TO_CMAKE_PATH
convertit un <path>
natif en un chemin de style cmake avec des barres obliques (/
). L’entrée peut être un chemin unique ou un chemin de recherche système comme $ENV{PATH}
. Un chemin de recherche sera converti en une liste de style cmake séparée par ;
caractères.
Le mode TO_NATIVE_PATH
convertit un <path>
de style cmake en un chemin natif avec des barres obliques spécifiques à la plate-forme (\
sous Windows et /
ailleurs).
Utilisez toujours des guillemets doubles autour du <path>
pour être sûr qu’il est traité comme un seul argument de cette commande.
file(DOWNLOAD <url> <file> )file(UPLOAD <file> <url> )
Le mode DOWNLOAD
télécharge le <url>
donné vers un <file>
local.Le mode UPLOAD
télécharge un <file>
local vers un <url>
donné.
Les options de DOWNLOAD
et UPLOAD
sont:
INACTIVITY_TIMEOUT <seconds>
Terminez l’opération après une période d’inactivité.
LOG <variable>
Stockez un journal lisible par l’homme de l’opération dans une variable.
SHOW_PROGRESS
Affiche les informations de progression sous forme de messages d’état jusqu’à ce que l’opération soit terminée.
STATUS <variable>
Stockez l’état résultant de l’opération dans une variable.Le statut est une liste séparée ;
de longueur 2.Le premier élément est la valeur de retour numérique de l’opération et le second élément est une valeur de chaîne pour l’erreur.Une erreur numérique 0
signifie aucune erreur dans l’opération.
TIMEOUT <seconds>
Terminez l’opération une fois qu’un temps total donné s’est écoulé.
USERPWD <username>:<password>
Définissez le nom d’utilisateur et le mot de passe pour le fonctionnement.
HTTPHEADER <HTTP-header>
En-tête HTTP pour l’opération. La sous-option peut être répétée plusieurs fois.
Les options supplémentaires à DOWNLOAD
sont:
EXPECTED_HASH ALGO=<value>
Vérifiez que le hachage du contenu téléchargé correspond à la valeur attendue, où
ALGO
est l’un des algorithmes pris en charge parfile(<HASH>)
.Si elle ne correspond pas, l’opération échoue avec une erreur.
EXPECTED_MD5 <value>
Courte main historique pour EXPECTED_HASH MD5=<value>
.
TLS_VERIFY <ON|OFF>
Spécifiez s’il faut vérifier le certificat du serveur pour les URL https://
.La valeur par défaut est de ne pas vérifier.
TLS_CAINFO <file>
Spécifiez un fichier d’autorité de certification personnalisé pour les URL https://
.
Pour les URL https://
CMake doit être construit avec le support OpenSSL. TLS/SSL
les certificats ne sont pas vérifiés par défaut. Définissez TLS_VERIFY
sur ON
pour vérifier les certificats et/ou utilisez EXPECTED_HASH
pour vérifier le contenu téléchargé.Si aucune des options TLS
n’est donnée, CMake vérifiera respectivement les variables CMAKE_TLS_VERIFY
et CMAKE_TLS_CAINFO
.
file(TIMESTAMP <filename> <variable> )
Calculez une représentation sous forme de chaîne du temps de modification de <filename>
et stockez-le dans <variable>
. Si la commande ne peut pas obtenir la variable atimestamp, elle sera définie sur la chaîne vide (« »).
Voir la commande string(TIMESTAMP)
pour la documentation des options <format>
et UTC
.
file(GENERATE OUTPUT output-file <INPUT input-file|CONTENT content> )
Générer un fichier de sortie pour chaque configuration de construction prise en charge par le CMake Generator
actuel. Évaluer generator expressions
à partir du contenu d’entrée pour produire le contenu de sortie. Les options sont:
CONDITION <condition>
Génère le fichier de sortie pour une configuration particulière uniquement si la condition est vraie. La condition doit être 0
ou 1
après évaluation des expressions du générateur.
CONTENT <content>
Utilisez le contenu donné explicitement en entrée.
INPUT <input-file>
Utilisez le contenu d’un fichier donné comme entrée.Un chemin relatif est traité par rapport à la valeur CMAKE_CURRENT_SOURCE_DIR
. Voir la politique CMP0070
.
OUTPUT <output-file>
Spécifiez le nom du fichier de sortie à générer. Utilisez des expressions de générateur telles que $<CONFIG>
pour spécifier un nom de fichier de sortie spécifique à la configuration. Plusieurs configurations peuvent générer le même fichier de sortie seulementsi le contenu généré est identique. Sinon, le <output-file>
doit être évalué à un nom unique pour chaque configuration.Un chemin relatif (après évaluation des expressions du générateur) est traitéavec la valeur CMAKE_CURRENT_BINARY_DIR
.Voir la politique CMP0070
.
Exactement une option CONTENT
ou INPUT
doit être donnée. Un fichier OUTPUT
spécifique peut être nommé par au plus une invocation de file(GENERATE)
.Les fichiers générés sont modifiés et leur horodatage mis à jour lors des cmakeruns suivants uniquement si leur contenu est modifié.
Notez également que file(GENERATE)
ne crée pas le fichier de sortie avant la phase de génération. Le fichier de sortie n’aura pas encore été écrit lorsque la commande file(GENERATE)
reviendra, il n’est écrit qu’après le traitement de tous les fichiers CMakeLists.txt
d’un projet.
file(<COPY|INSTALL> <files>... DESTINATION <dir> ] )
La signature COPY
copie les fichiers, les répertoires et les liens symboliques vers le dossier adestination. Les chemins d’entrée relatifs sont évalués par rapport au répertoire source actuel, et une destination relative est évaluée par rapport au répertoire de construction actuel. Copyingpréserve l’horodatage du fichier d’entrée et optimise un fichier s’il existe à la destination avec le même horodatage. La copie préserve les permissions d’entrée sauf si des autorisations explicites ou NO_SOURCE_PERMISSIONS
sont données (la valeur par défaut est USE_SOURCE_PERMISSIONS
).
Voir la commande install(DIRECTORY)
pour la documentation des permissions, FILES_MATCHING
, PATTERN
, REGEX
, et EXCLUDE
options. La copie de répertoires préserve la structure de leur contenu même si des options sont utilisées pour sélectionner un sous-ensemble de fichiers.
La signature INSTALL
diffère légèrement de COPY
: elle imprime les messages de statut (sous réserve de la variable CMAKE_INSTALL_MESSAGE
), et NO_SOURCE_PERMISSIONS
est par défaut.Scripts d’installation générés par la commande install()
utilisez cette signature (avec quelques options non documentées pour un usage interne).
file(LOCK <path> )
Verrouillez un fichier spécifié par <path>
si aucune option DIRECTORY
n’est présente et un fichier <path>/cmake.lock
sinon. Le fichier sera verrouillé pour la portée définie par l’option GUARD
(la valeur par défaut est PROCESS
). l’option RELEASE
peut être utiliséepour déverrouiller explicitement le fichier. Si l’option TIMEOUT
n’est pas spécifiée, CMake attend jusqu’à ce que le verrouillage réussisse ou jusqu’à ce qu’une erreur fatale se produise. Si TIMEOUT
est défini sur 0
, le verrouillage sera essayé une fois et le résultat sera immédiatement signalé. Si TIMEOUT
n’est pas 0
, CMake essaiera de verrouiller le fichier pour la période spécifiée par la valeur <seconds>
. Toute erreur sera interprétée comme fatale s’il n’y a pas d’option RESULT_VARIABLE
. Sinon, le résultat sera stocké dans <variable>
et sera 0
en cas de succès ou de message d’erreur en cas d’échec.
Notez que le verrou est consultatif – il n’y a aucune garantie que d’autres processus respecteront ce verrou, c’est-à-dire que le verrou synchronise deux instances CMake ou plus partageant certaines ressources modifiables. Logique similaire appliquée à l’option DIRECTORY
– le verrouillage du répertoire parent n’empêche pas les autres commandes LOCK
de verrouiller le répertoire ou le fichier anychild.
Essayer de verrouiller le fichier deux fois n’est pas autorisé. Tous les répertoires intermédiaires etle fichier lui-même sera créé s’ils n’existent pas. Options GUARD
et TIMEOUT
ignorées lors de l’opération RELEASE
.