Make-файл, который сжимает JavaScript

Я просто пытаюсь исправить код Хаззена:

(define (replace-nth list n elem)
  (cond 
    ((null? list) ())
    ((eq? n 0) (cons elem list))
    (#t (cons(car list) (replace-nth (cdr list) (- n 1) elem)))))

> (replace-nth (list 3 2 9 2) 2 8)
(3 2 8 9 2)

Этот код вставил новый элемент в список. Если мы хотим заменить элемент:

(define (replace-nth list n elem)
  (cond 
    ((null? list) ())
    ((eq? n 0) (cons elem (cdr list)))
    (#t (cons(car list) (replace-nth (cdr list) (- n 1) elem)))))

> (replace-nth (list 3 2 9 2) 2 8)
(3 2 8 2)

0 < = n < = длина (список) - 1

5
задан hughdbrown 5 August 2009 в 02:47
поделиться

1 ответ

Ваш make-файл будет выглядеть примерно так

code.compressed.js: code.js
    compressor -o $@ $<

Обратите внимание, что вторая строка имеет отступ с помощью символа табуляции , а не только пробелов. Об этом заботится утилита make.

code.compressed.js - это имя, в которое должен быть записан файл, code.js - это файл для сжатия, а компрессор - это программа, выполняющая сжатие.

Флаг -o указывает выходной файл в соответствии с соглашением компиляторов и аналогичных инструментов. Ваш может отличаться; проверьте его документацию.

Переменная $ @ - это сокращение Makefile для «цели этого правила», в данном случае code.compressed.js . Точно так же $ < - это аббревиатура для «первой зависимости этого правила». Эти переменные полезны, так что вам не нужно ни повторяться, ни делать повторяющиеся изменения при переименовании файлов.

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

code.compressed.js: code1.js code2.js
    compressor -o $@ $^

В качестве альтернативы, если вы хотите, чтобы каждый из них был сжат по отдельности, вы можете написать шаблонное правило и используйте его для всех:

TARGETS = code1.cjs code2.cjs code3.cjs

all: $(TARGETS)

%.cjs: %.js
    compressor -o $@ $<

Сделайте по умолчанию создание первой цели, которую он видит, в данном случае это все . Список файлов для сжатия задается содержимым переменной TARGET . % - это подстановочный знак, который make заменит для создания правил сопоставления имен исходного и целевого файлов.

10
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: