Spec-Zone.ru › GNU Make

Функция файла

Функция file позволяет makefile записывать в файл или читать из него. Поддерживаются два режима записи: перезапись, где текст записывается в начало файла, и любые существующие данные теряются, и добавление, где текст записывается в конец файла, сохраняя существующее содержимое. В обоих случаях файл создается, если он не существует. Ошибка возникает, если файл нельзя открыть для записи или операция записи завершается неудачно. Функция file расширяется до пустой строки при записи в файл.

При чтении из файла, функция file расширяется до точного содержимого файла, за исключением последней новой строки (если она есть), которая будет удалена. Попытка чтения из несуществующего файла расширяется до пустой строки.

Синтаксис функции file:

$(file op filename[,text])

При вычислении функции file все ее аргументы сначала расширяются, затем файл, указанный в filename, будет открыт в режиме, описанном в op.

Оператор op может быть > для указания перезаписи файла новым содержимым, >> для указания добавления к текущему содержимому файла, или < для указания чтения содержимого файла. filename указывает файл, в который нужно записать или из которого нужно прочитать данные. Между оператором и именем файла может быть пробел.

При чтении файлов предоставление значения text является ошибкой.

При записи в файлы text будет записан в файл. Если text не заканчивается новой строкой, будет добавлена конечная новая строка (даже если text пустая строка). Если аргумент text вообще не задан, ничего не будет записано.

Например, функция file может быть полезна, если ваша система сборки имеет ограниченный размер командной строки, а ваш рецепт выполняет команду, которая может принимать аргументы из файла. Многие команды используют соглашение, что аргумент, начинающийся с @, указывает файл, содержащий дополнительные аргументы. Тогда вы можете написать свой рецепт таким образом:

program: $(OBJECTS)
        $(file >$@.in,$^)
        $(CMD) $(CMDFLAGS) @$@.in
        @rm $@.in

Если команда требовала, чтобы каждый аргумент был на отдельной строке входного файла, вы можете написать свой рецепт так:

program: $(OBJECTS)
        $(file >$@.in) $(foreach O,$^,$(file >>$@.in,$O))
        $(CMD) $(CMDFLAGS) @$@.in
        @rm $@.in

Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/File-Function.html

Spec-Zone.ru

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