configure_file
Копирует файл в другое место и изменяет его содержимое.
configure_file(<input> <output>
[COPYONLY] [ESCAPE_QUOTES] [@ONLY]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
Копирует файл <input> в файл <output> и подставляет значения переменных, указанных как @VAR@ или ${VAR} в содержимом входного файла. Каждая ссылка на переменную будет заменена текущим значением переменной или пустой строкой, если переменная не определена. Кроме того, строки входного файла вида:
#cmakedefine VAR ...
будут заменены либо:
#define VAR ...
либо:
/* #undef VAR */
в зависимости от того, установлена ли переменная VAR в CMake в какое-либо значение, не считающееся ложным значением командой if(). Содержимое «…», если оно есть, в строке после имени переменной обрабатывается аналогично. Строки входного файла вида #cmakedefine01 VAR будут заменены либо #define VAR 1 либо #define VAR 0 аналогичным образом. Результирующие строки (за исключением комментариев #undef) могут быть отформатированы с отступами, используя пробелы и/или табуляцию между символом # и словами cmakedefine или cmakedefine01. Этот отступ будет сохранён в выходных строках:
# cmakedefine VAR # cmakedefine01 VAR
будет заменено, если VAR определено, на:
# define VAR # define VAR 1
Если входной файл изменён, система сборки повторно запустит CMake для повторной конфигурации файла и повторного генерации системы сборки. Сгенерированный файл изменяется и его метка времени обновляется при последующих запусках CMake только в том случае, если его содержимое изменено.
Аргументы:
-
<input> - Путь к входному файлу. Относительный путь интерпретируется относительно значения
CMAKE_CURRENT_SOURCE_DIR. Путь к входному файлу должен указывать на файл, а не на директорию. -
<output> - Путь к выходному файлу или директории. Относительный путь интерпретируется относительно значения
CMAKE_CURRENT_BINARY_DIR. Если указанный путь — это существующая директория, выходной файл размещается в этой директории с тем же именем файла, что и входной файл. -
COPYONLY - Копирует файл без замены каких-либо ссылок на переменные или другого содержимого. Этот параметр не может использоваться с
NEWLINE_STYLE. -
ESCAPE_QUOTES - Экранирует любые подставленные кавычки обратными слешами (в стиле C).
-
@ONLY - Ограничивает замену переменных ссылками вида
@VAR@. Это полезно для конфигурации скриптов, использующих синтаксис${VAR}. -
NEWLINE_STYLE <style> - Указывает стиль новой строки для выходного файла. Укажите
UNIXилиLFдля\nновых строк, или укажитеDOS,WIN32, илиCRLFдля\r\nновых строк. Этот параметр не может использоваться сCOPYONLY.
Пример
Рассмотрим дерево исходных файлов, содержащее файл foo.h.in.
#cmakedefine FOO_ENABLE #cmakedefine FOO_STRING "@FOO_STRING@"
Соседний файл CMakeLists.txt может использовать configure_file для конфигурации заголовка:
option(FOO_ENABLE "Enable Foo" ON) if(FOO_ENABLE) set(FOO_STRING "foo") endif() configure_file(foo.h.in foo.h @ONLY)
Это создаст файл foo.h в каталоге сборки, соответствующем этому каталогу исходных файлов. Если параметр FOO_ENABLE включён, сконфигурированный файл будет содержать:
#define FOO_ENABLE #define FOO_STRING "foo"
В противном случае он будет содержать:
/* #undef FOO_ENABLE */ /* #undef FOO_STRING */
Затем можно использовать команду include_directories() для указания каталога вывода как каталога включения:
include_directories(${CMAKE_CURRENT_BINARY_DIR})
чтобы исходные файлы могли включать заголовок как #include <foo.h>.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.10/command/configure_file.html