Простая система сборки с поддержкой пространств имен файлов? - PullRequest
0 голосов
/ 18 мая 2018

У меня проблемы с поиском системы сборки для моих заметок Madoko Markdown.Эти заметки являются просто каталогом файлов, которые обрабатываются с madoko mynote.mdk для получения out/mynote.html.GNU Make прекрасно работал для этой цели, пока я не создал заметку с пробелом в имени файла.Понятно, что GNU Make просто не может справиться с этим.Что вызывает разочарование, потому что я не знаю других систем, таких как GNU Make.

Какие еще системы сборки я мог бы попробовать, чтобы справиться с этой задачей?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Довольно простым решением, которое до сих пор работает для меня, является простой сценарий оболочки, основанный на тесте оболочки ["$source" -nt "$target"], как показано ниже.Я заинтересован в добавлении опции -watch, используя inotifywait для компиляции каждого файла, когда он модифицирован.Запуск следующего сценария без аргументов компилирует все «устаревшие» .mdk файлы в рабочем каталоге.

#!/usr/bin/env bash

TOBUILD=()
while [[ $# -gt 0 ]]; do
  case $1 in
    clean|-clean|-c) # Clean output directory
    CLEAN=true
    shift
    ;;
    -f|--force) # Force rebuild all files
    FORCE=true
    shift
    ;;
    *) # Force rebuild these files
    TOBUILD+=("$1")
    shift
    ;;
  esac
done

if [ "$CLEAN" = true ]; then
  rm -rf out
  exit
fi

if [ ${#TOBUILD[@]} -gt 0 ]; then
  FORCE=true
else
  for source in *.mdk; do
    TOBUILD+=("$source")
  done
fi
0 голосов
/ 18 мая 2018

Со временем разные языки программирования или экосистемы обычно создают свои собственные инструменты для сборки.Поэтому они, как правило, в большей степени связаны с соответствующим контекстом, в котором они, как ожидается, будут использоваться. Хотя make уже является более старым инструментом сборки, он все еще широко используется, поскольку в нем не делается слишком много предположений относительно того, что вы пытаетесь построить.Однако, как вы обнаружили сами, у него есть свои пределы.

Лично я воздерживался от того, чтобы больше не использовать пробелы в именах файлов, и все еще использую Madoko с make.Однако, если вам это не удобно, ваши варианты являются инструментом, который по своей сути принесет с собой больше контекстуальных допущений.Например, с помощью инструмента Gradle в мире Java, как правило, будет легко выполнить ваше требование, но вам придется выражать его с помощью синтаксиса Groovy, и каждый запуск вашей задачи будет включать JVM.Другим примером является Rake, который требует от вас представить экосистему Ruby.Тем не менее, я бы порекомендовал вам попробовать, потому что это довольно просто, но все же мощно и определенно более легко, чем подход JVM.Другим более разнородным подходом может быть Cmake, но, не имея опыта, я ничего не могу сказать о взлетах или падениях.

...