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 */
в зависимости от того, установлено ли в CMake значение VAR в любом значении, которое не считается ложным константой командой if(). Содержимое «…», если оно есть в строке после имени переменной, обрабатывается аналогично вышеописанному. Строки входного файла вида #cmakedefine01 VAR будут заменены либо #define VAR 1 или #define VAR 0 аналогичным образом.
Если входной файл изменён, система сборки повторно запустит 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.6/command/configure_file.html