Spec-Zone.ru › CMake 3.19

configure_file

Копирует файл в другое место и изменяет его содержимое.

configure_file(<input> <output>
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NO_SOURCE_PERMISSIONS]
               [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 аналогичным образом. Результирующие строки (за исключением комментариев #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}.

NO_SOURCE_PERMISSIONS

Не копирует права доступа к файлу из оригинального файла в копию. Права доступа к копируемому файлу по умолчанию устанавливаются на значение 644 (-rw-r–r–).

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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.19/command/configure_file.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API