Какое-либо интересное использование Make-файлов для совместного использования?

Да, вы можете, но если вы объявите массив факториалов в цикле, он будет доступен только в этом замыкании. Так что утешить его из цикла не получится.

Вот очень информативная статья о замыканиях: https://javascript.info/closure

Весь сайт javascript.info очень интересный, сейчас я его изучаю, чтобы укрепить мои основы JavaScript и заполнить неизвестные информационные дыры, хотя я занимаюсь веб-разработкой уже много лет. Но никогда не бывает больно получать больше знаний, даже если это основа.

Также я бы посоветовал вам использовать «используйте строгий»; с самого начала разработки, это помогает сохранить ваши сценарии более чистыми, не допуская источников ошибок.

12
задан mjy 27 December 2008 в 18:15
поделиться

5 ответов

Параллелизм Make особенно удобен для сценариев оболочки. Скажите, что Вы хотите получить 'время работы' полного набора хостов (или в основном выполнить любую медленную операцию). Вы могли сделать это в цикле:

cat hosts | while read host; do echo "$host: $(ssh $host uptime)"; done

Это работает, но медленно. Можно параллелизировать это путем порождения подоболочек:

cat hosts | while read host; do (echo "$host: $(ssh $host uptime)")&; done

Но теперь Вы не имеете никакого контроля, сколько потоков Вы мечете икру, и CTRL-C чисто не прервет все потоки.

Вот Сделать решение: сохраните это в файл (например. showuptimes) и метка как исполняемый файл:

#!/usr/bin/make -f

hosts:=$(shell cat)
all: ${hosts}

${hosts} %:
        @echo "$@: `ssh $@ uptime`"

.PHONY: ${hosts} all

Теперь выполнение cat hosts | ./showuptimes распечатает времена работы один за другим. cat hosts | ./showuptimes -j выполнит их всех параллельно. У вызывающей стороны есть прямое управление степенью распараллеливания (-j), или может указать его косвенно системной нагрузкой (-l).

19
ответ дан 2 December 2019 в 06:10
поделиться

Кроме очевидного использования в программировании, я видел, что Make-файлы раньше выполняли повторяющиеся задачи на серверах для управления параметрами настройки системы, такими как создание пользователя/группы, обновления/обновления пакета и копирование файлов конфигурации в место. Я также видел (и использовал), грабли, чтобы сделать это в основанных на Ruby средах.

Самым сложным примером этого, о котором я услышал, является ISConf, инструмент управления конфигурацией. Я слышал об этом от Luke Kanies, автора Марионетки, на его блоге.

3
ответ дан 2 December 2019 в 06:10
поделиться

В зависимости от разнообразия 'делают', можно приплыть через зависимости задач при помощи исполняемых make-файлов по сравнению со сценариями оболочки.. т.е. в сценарии, где один init сценарий должен запустить 10 сервисов... один за другим (т.е. сервис две потребности обслуживают для возрастания и живы до запуска), его легко сделанный через make-файл.

Много поставщиков программного блока GNU/Linux использует это, т.е. debian/rules и других. Так да, если сделано правильно, сделайте, так же хорошо в запуске программ, как он как создает их.

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

2
ответ дан 2 December 2019 в 06:10
поделиться

Это, вероятно, означает, что мое воображение является несовершенным, но трудно получить достаточную гибкость в make-файл для такого использования. 'Очевидный' способ достигнуть его состоит в том, чтобы указать макро-значения на'make'командная строка.

make -f script.mk MACRO="list of files on which to operate"

Это является более подробным, чем простой сценарий оболочки - и Вы теряете легкую способность использовать расширение имени файла оболочки. Обходное решение для этого:

make -f script.mk MACRO="$(echo *[io]*)"

Я предложил бы этому ТАК вопрос о, Почему бы не использовать #!/bin/make во главе make-файлов как нечетное использование (исполняемых) make-файлов, но цель там не состояла в том, чтобы сделать необычных вещей (просто скучные старые сборки программного обеспечения); только использовать необычный механизм вызова для make.

Используя технику, Вы могли упростить вызов до:

script.mk MACRO="$(echo *[io]*)"

Это является еще более подробным, чем:

script *[io]*

Я предполагаю script мог быть записан, чтобы сделать вызов make. Все это зависит. Я не убежден, что существует достаточно пробега, который будет получен из него; YMMV.

1
ответ дан 2 December 2019 в 06:10
поделиться

Моя работа использует любопытный: зависимости не существуют так, это всегда восстанавливает все.

Возможно, также использовал пакетный файл.

0
ответ дан 2 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

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