Spec-Zone.ru › CMake 3.29

configure_file

  • Параметры
  • Преобразования
  • Пример
  • См. также

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

configure_file(<input> <output>
               [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
                FILE_PERMISSIONS <permissions>...]
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

Копирует файл <input> в файл <output>, выполняя преобразования содержимого входного файла.

Если входной файл изменен, система сборки повторно выполнит CMake для повторной конфигурации файла и генерации системы сборки. Сгенерированный файл изменяется и его метка времени обновляется при последующих запусках cmake только в случае изменения его содержимого.

Параметры

Параметры:

<input>

Путь к входному файлу. Относительный путь обрабатывается относительно значения CMAKE_CURRENT_SOURCE_DIR. Путь к входному файлу должен указывать на файл, а не на директорию.

<output>

Путь к выходному файлу или директории. Относительный путь обрабатывается относительно значения CMAKE_CURRENT_BINARY_DIR. Если путь указывает на существующую директорию, выходной файл помещается в эту директорию с тем же именем файла, что и входной файл. Если путь содержит несуществующие директории, они создаются.

NO_SOURCE_PERMISSIONS

Новая в версии 3.19.

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

USE_SOURCE_PERMISSIONS

Новая в версии 3.20.

Передать права доступа входного файла выходному файлу. Это уже поведение по умолчанию, если ни один из трех ключевых слов, связанных с правами доступа, не указан (NO_SOURCE_PERMISSIONS, USE_SOURCE_PERMISSIONS или FILE_PERMISSIONS). Ключевое слово USE_SOURCE_PERMISSIONS в основном служит для более явного указания целевого поведения в месте вызова.

FILE_PERMISSIONS <permissions>...

Новая в версии 3.20.

Игнорировать права доступа входного файла и использовать указанные <permissions> для выходного файла вместо них.

COPYONLY

Скопировать файл без замены каких-либо ссылок на переменные или другого содержимого. Этот параметр нельзя использовать с NEWLINE_STYLE.

ESCAPE_QUOTES

Экранировать любые подставленные кавычки обратными слешами (в стиле C).

@ONLY

Ограничить замену переменных ссылками вида @VAR@. Это полезно для конфигурирования скриптов, использующих синтаксис ${VAR}.

NEWLINE_STYLE <style>

Указать стиль новой строки для выходного файла. Укажите UNIX или LF для \n новых строк, или укажите DOS, WIN32, или CRLF для \r\n новых строк. Этот параметр нельзя использовать с COPYONLY.

Преобразования

Переменные, на которые ссылаются в содержимом входного файла как @VAR@, ${VAR}, $CACHE{VAR}, и переменные среды, на которые ссылаются как $ENV{VAR}, будут заменены текущим значением переменной или пустой строкой, если переменная не определена. Кроме того, строки входного файла вида

#cmakedefine VAR ...

будут заменены либо

#define VAR ...

либо

/* #undef VAR */

в зависимости от того, установлено ли значение VAR в CMake на любое значение, которое не считается ложным константой командой if(). Содержимое "..." в строке после имени переменной, если оно есть, обрабатывается аналогично.

В отличие от строк вида #cmakedefine VAR ..., в строках вида #cmakedefine01 VAR, VAR само по себе будет расширяться до VAR 0 или VAR 1 вместо присвоения значения .... Следовательно, строки входного файла вида

#cmakedefine01 VAR

будут заменены либо

#define VAR 0

либо

#define VAR 1

Строки входного файла вида #cmakedefine01 VAR ... будут расширяться как #cmakedefine01 VAR ... 0 или #cmakedefine01 VAR ... 1, что может привести к неопределенному поведению.

Новая в версии 3.10: Строки результата (за исключением комментариев #undef могут быть отступом, используя пробелы и/или табуляцию между символом # и словами cmakedefine или cmakedefine01. Этот отступ будет сохранен в выходных строках:

#  cmakedefine VAR
#  cmakedefine01 VAR

будет заменено, если VAR определено, на

#  define VAR
#  define VAR 1

Пример

Рассмотрим дерево исходных файлов, содержащее файл 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 */

Затем можно использовать команду target_include_directories() для указания каталога вывода в качестве каталога включения:

target_include_directories(<target> [SYSTEM] <INTERFACE|PUBLIC|PRIVATE> "${CMAKE_CURRENT_BINARY_DIR}")

чтобы исходные файлы могли включать заголовок как #include <foo.h>.

См. также

  • file(GENERATE)

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.29/command/configure_file.html

Spec-Zone.ru

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