file.rst 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. file
  2. ----
  3. File manipulation command.
  4. ------------------------------------------------------------------------------
  5. ::
  6. file(WRITE <filename> <content>...)
  7. file(APPEND <filename> <content>...)
  8. Write ``<content>`` into a file called ``<filename>``. If the file does
  9. not exist, it will be created. If the file already exists, ``WRITE``
  10. mode will overwrite it and ``APPEND`` mode will append to the end.
  11. (If the file is a build input, use the :command:`configure_file` command
  12. to update the file only when its content changes.)
  13. ------------------------------------------------------------------------------
  14. ::
  15. file(READ <filename> <variable>
  16. [OFFSET <offset>] [LIMIT <max-in>] [HEX])
  17. Read content from a file called ``<filename>`` and store it in a
  18. ``<variable>``. Optionally start from the given ``<offset>`` and
  19. read at most ``<max-in>`` bytes. The ``HEX`` option causes data to
  20. be converted to a hexadecimal representation (useful for binary data).
  21. ------------------------------------------------------------------------------
  22. ::
  23. file(STRINGS <filename> <variable> [<options>...])
  24. Parse a list of ASCII strings from ``<filename>`` and store it in
  25. ``<variable>``. Binary data in the file are ignored. Carriage return
  26. (``\r``, CR) characters are ignored. The options are:
  27. ``LENGTH_MAXIMUM <max-len>``
  28. Consider only strings of at most a given length.
  29. ``LENGTH_MINIMUM <min-len>``
  30. Consider only strings of at least a given length.
  31. ``LIMIT_COUNT <max-num>``
  32. Limit the number of distinct strings to be extracted.
  33. ``LIMIT_INPUT <max-in>``
  34. Limit the number of input bytes to read from the file.
  35. ``LIMIT_OUTPUT <max-out>``
  36. Limit the number of total bytes to store in the ``<variable>``.
  37. ``NEWLINE_CONSUME``
  38. Treat newline characters (``\n``, LF) as part of string content
  39. instead of terminating at them.
  40. ``NO_HEX_CONVERSION``
  41. Intel Hex and Motorola S-record files are automatically converted to
  42. binary while reading unless this option is given.
  43. ``REGEX <regex>``
  44. Consider only strings that match the given regular expression.
  45. ``ENCODING <encoding-type>``
  46. Consider strings of a given encoding. "UTF-8" is currently supported.
  47. For example, the code
  48. .. code-block:: cmake
  49. file(STRINGS myfile.txt myfile)
  50. stores a list in the variable ``myfile`` in which each item is a line
  51. from the input file.
  52. ------------------------------------------------------------------------------
  53. ::
  54. file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> <filename> <variable>)
  55. Compute a cryptographic hash of the content of ``<filename>`` and
  56. store it in a ``<variable>``.
  57. ------------------------------------------------------------------------------
  58. ::
  59. file(GLOB <variable> [RELATIVE <path>] [<globbing-expressions>...])
  60. file(GLOB_RECURSE <variable> [RELATIVE <path>]
  61. [FOLLOW_SYMLINKS] [<globbing-expressions>...])
  62. Generate a list of files that match the ``<globbing-expressions>`` and
  63. store it into the ``<variable>``. Globbing expressions are similar to
  64. regular expressions, but much simpler. If ``RELATIVE`` flag is
  65. specified, the results will be returned as relative paths to the given
  66. path.
  67. .. note::
  68. We do not recommend using GLOB to collect a list of source files from
  69. your source tree. If no CMakeLists.txt file changes when a source is
  70. added or removed then the generated build system cannot know when to
  71. ask CMake to regenerate.
  72. Examples of globbing expressions include::
  73. *.cxx - match all files with extension cxx
  74. *.vt? - match all files with extension vta,...,vtz
  75. f[3-5].txt - match files f3.txt, f4.txt, f5.txt
  76. The ``GLOB_RECURSE`` mode will traverse all the subdirectories of the
  77. matched directory and match the files. Subdirectories that are symlinks
  78. are only traversed if ``FOLLOW_SYMLINKS`` is given or policy
  79. :policy:`CMP0009` is not set to ``NEW``.
  80. Examples of recursive globbing include::
  81. /dir/*.py - match all python files in /dir and subdirectories
  82. ------------------------------------------------------------------------------
  83. ::
  84. file(RENAME <oldname> <newname>)
  85. Move a file or directory within a filesystem from ``<oldname>`` to
  86. ``<newname>``, replacing the destination atomically.
  87. ------------------------------------------------------------------------------
  88. ::
  89. file(REMOVE [<files>...])
  90. file(REMOVE_RECURSE [<files>...])
  91. Remove the given files. The ``REMOVE_RECURSE`` mode will remove the given
  92. files and directories, also non-empty directories
  93. ------------------------------------------------------------------------------
  94. ::
  95. file(MAKE_DIRECTORY [<directories>...])
  96. Create the given directories and their parents as needed.
  97. ------------------------------------------------------------------------------
  98. ::
  99. file(RELATIVE_PATH <variable> <directory> <file>)
  100. Compute the relative path from a ``<directory>`` to a ``<file>`` and
  101. store it in the ``<variable>``.
  102. ------------------------------------------------------------------------------
  103. ::
  104. file(TO_CMAKE_PATH "<path>" <variable>)
  105. file(TO_NATIVE_PATH "<path>" <variable>)
  106. The ``TO_CMAKE_PATH`` mode converts a native ``<path>`` into a cmake-style
  107. path with forward-slashes (``/``). The input can be a single path or a
  108. system search path like ``$ENV{PATH}``. A search path will be converted
  109. to a cmake-style list separated by ``;`` characters.
  110. The ``TO_NATIVE_PATH`` mode converts a cmake-style ``<path>`` into a native
  111. path with platform-specific slashes (``\`` on Windows and ``/`` elsewhere).
  112. Always use double quotes around the ``<path>`` to be sure it is treated
  113. as a single argument to this command.
  114. ------------------------------------------------------------------------------
  115. ::
  116. file(DOWNLOAD <url> <file> [<options>...])
  117. file(UPLOAD <file> <url> [<options>...])
  118. The ``DOWNLOAD`` mode downloads the given ``<url>`` to a local ``<file>``.
  119. The ``UPLOAD`` mode uploads a local ``<file>`` to a given ``<url>``.
  120. Options to both ``DOWNLOAD`` and ``UPLOAD`` are:
  121. ``INACTIVITY_TIMEOUT <seconds>``
  122. Terminate the operation after a period of inactivity.
  123. ``LOG <variable>``
  124. Store a human-readable log of the operation in a variable.
  125. ``SHOW_PROGRESS``
  126. Print progress information as status messages until the operation is
  127. complete.
  128. ``STATUS <variable>``
  129. Store the resulting status of the operation in a variable.
  130. The status is a ``;`` separated list of length 2.
  131. The first element is the numeric return value for the operation,
  132. and the second element is a string value for the error.
  133. A ``0`` numeric error means no error in the operation.
  134. ``TIMEOUT <seconds>``
  135. Terminate the operation after a given total time has elapsed.
  136. Additional options to ``DOWNLOAD`` are:
  137. ``EXPECTED_HASH ALGO=<value>``
  138. Verify that the downloaded content hash matches the expected value, where
  139. ``ALGO`` is one of ``MD5``, ``SHA1``, ``SHA224``, ``SHA256``, ``SHA384``, or
  140. ``SHA512``. If it does not match, the operation fails with an error.
  141. ``EXPECTED_MD5 <value>``
  142. Historical short-hand for ``EXPECTED_HASH MD5=<value>``.
  143. ``TLS_VERIFY <ON|OFF>``
  144. Specify whether to verify the server certificate for ``https://`` URLs.
  145. The default is to *not* verify.
  146. ``TLS_CAINFO <file>``
  147. Specify a custom Certificate Authority file for ``https://`` URLs.
  148. For ``https://`` URLs CMake must be built with OpenSSL support. ``TLS/SSL``
  149. certificates are not checked by default. Set ``TLS_VERIFY`` to ``ON`` to
  150. check certificates and/or use ``EXPECTED_HASH`` to verify downloaded content.
  151. If neither ``TLS`` option is given CMake will check variables
  152. ``CMAKE_TLS_VERIFY`` and ``CMAKE_TLS_CAINFO``, respectively.
  153. ------------------------------------------------------------------------------
  154. ::
  155. file(TIMESTAMP <filename> <variable> [<format>] [UTC])
  156. Compute a string representation of the modification time of ``<filename>``
  157. and store it in ``<variable>``. Should the command be unable to obtain a
  158. timestamp variable will be set to the empty string ("").
  159. See the :command:`string(TIMESTAMP)` command for documentation of
  160. the ``<format>`` and ``UTC`` options.
  161. ------------------------------------------------------------------------------
  162. ::
  163. file(GENERATE <options>...)
  164. Generate an output file for each build configuration supported by the current
  165. :manual:`CMake Generator <cmake-generators(7)>`. Evaluate
  166. :manual:`generator expressions <cmake-generator-expressions(7)>`
  167. from the input content to produce the output content. The options are:
  168. ``CONDITION <condition>``
  169. Generate the output file for a particular configuration only if
  170. the condition is true. The condition must be either ``0`` or ``1``
  171. after evaluating generator expressions.
  172. ``CONTENT <content>``
  173. Use the content given explicitly as input.
  174. ``INPUT <input-file>``
  175. Use the content from a given file as input.
  176. ``OUTPUT <output-file>``
  177. Specify the output file name to generate. Use generator expressions
  178. such as ``$<CONFIG>`` to specify a configuration-specific output file
  179. name. Multiple configurations may generate the same output file only
  180. if the generated content is identical. Otherwise, the ``<output-file>``
  181. must evaluate to an unique name for each configuration.
  182. Exactly one ``CONTENT`` or ``INPUT`` option must be given. A specific
  183. ``OUTPUT`` file may be named by at most one invocation of ``file(GENERATE)``.
  184. Generated files are modified on subsequent cmake runs only if their content
  185. is changed.
  186. ------------------------------------------------------------------------------
  187. ::
  188. file(<COPY|INSTALL> <files>... DESTINATION <dir>
  189. [FILE_PERMISSIONS <permissions>...]
  190. [DIRECTORY_PERMISSIONS <permissions>...]
  191. [NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]
  192. [FILES_MATCHING]
  193. [[PATTERN <pattern> | REGEX <regex>]
  194. [EXCLUDE] [PERMISSIONS <permissions>...]] [...])
  195. The ``COPY`` signature copies files, directories, and symlinks to a
  196. destination folder. Relative input paths are evaluated with respect
  197. to the current source directory, and a relative destination is
  198. evaluated with respect to the current build directory. Copying
  199. preserves input file timestamps, and optimizes out a file if it exists
  200. at the destination with the same timestamp. Copying preserves input
  201. permissions unless explicit permissions or ``NO_SOURCE_PERMISSIONS``
  202. are given (default is ``USE_SOURCE_PERMISSIONS``).
  203. See the :command:`install(DIRECTORY)` command for documentation of
  204. permissions, ``PATTERN``, ``REGEX``, and ``EXCLUDE`` options.
  205. The ``INSTALL`` signature differs slightly from ``COPY``: it prints
  206. status messages (subject to the :variable:`CMAKE_INSTALL_MESSAGE` variable),
  207. and ``NO_SOURCE_PERMISSIONS`` is default.
  208. Installation scripts generated by the :command:`install` command
  209. use this signature (with some undocumented options for internal use).