Spec-Zone.ru › CMake 3.12

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.12/command/configure_file.html

Spec-Zone.ru

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