Spec-Zone.ru › GNU Make

Пример использования 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

Spec-Zone.ru

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