Пример использования Guile в make
Вот очень простой пример использования GNU Guile для управления записью в файл. Эти процедуры Guile просто открывают файл, позволяют записывать в файл (по одной строке за раз) и закрывают файл. Обратите внимание, что поскольку мы не можем хранить сложные значения, такие как порты Guile, в make переменных, мы будем хранить порт как глобальную переменную в интерпретаторе Guile.
Вы можете легко создавать функции Guile, используя define/endef для создания скрипта Guile, а затем использовать функцию guile для его интернализации:
define GUILEIO ;; A simple Guile IO library for GNU make (define MKPORT #f) (define (mkopen name mode) (set! MKPORT (open-file name mode)) #f) (define (mkwrite s) (display s MKPORT) (newline MKPORT) #f) (define (mkclose) (close-port MKPORT) #f) #f endef # Internalize the Guile IO functions $(guile $(GUILEIO))
Если у вас есть значительное количество вспомогательного кода Guile, вы можете рассмотреть возможность хранения его в отдельном файле (например, guileio.scm) и затем загрузить его в свой makefile с помощью функции guile:
$(guile (load "guileio.scm"))
Преимущество этого метода заключается в том, что при редактировании guileio.scm ваш редактор будет понимать, что этот файл содержит синтаксис Scheme, а не синтаксис makefile.
Теперь вы можете использовать эти функции Guile для создания файлов. Предположим, вам нужно обработать очень большой список, который не помещается в командную строку, но утилита, которую вы используете, также принимает этот список в качестве входных данных:
prog: $(PREREQS)
@$(guile (mkopen "tmp.out" "w")) \
$(foreach X,$^,$(guile (mkwrite "$(X)"))) \
$(guile (mkclose))
$(LINK) < tmp.out
Конечно, возможен более полный набор процедур манипулирования файлами. Например, вы можете поддерживать несколько выходных файлов одновременно, выбрав символ для каждого и используя его в качестве ключа хэш-таблицы, где значение — порт, а затем возвращая символ для хранения в переменной make.
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/Guile-Example.html