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, соответственно.
Если входной файл изменён, система сборки повторно выполнит 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.9/command/configure_file.html