2012-05-24 2 views
1

Прежде всего, я знаю, как написать базовый/промежуточный уровень makefile. В моих проектах на C++ я использую makefile, который делает много вещей автоматически. Самое главное для меня то, что он автоматически обнаруживает все исходные файлы (которые всегда находятся в одной папке) с использованием подстановочных знаков, использует это для прогнозирования имени (и местоположения) всех объектных файлов и компилируется соответствующим образом.Управление проектом scala с помощью Makefile

Недавно я пытался добиться такого же эффекта с помощью моих проектов scala , но я ударил два препятствия.

  • Copilled файлы классы, которые принадлежат к пакетам, которые хранятся в подкаталогах (как com/me/mypack/). Это проблема, потому что Сделать необходимо найти эти файлы, чтобы проверить метки времени (и I не знаю, как это сделать автоматически).
  • Некоторые исходные файлы (например, определяющие package object) создают файлы классов с различными стандартами именования. Опять же, Сделать должен знать, где находятся эти файлы классов, и я не знаю, как сделать это автоматически.

Следствием этого является то, что «проблемные» исходные файлы являются перекомпилировать каждый раз, когда я бегу make (который усугубляется в Scala долго время компиляции). Я хотел бы знать, как исправить это, не требуя, чтобы вручную выписал весь список ожидаемых файлов классов.

EDITВ качестве дополнительной записке: Я хотел бы, чтобы избежать размещения исходных файлов в подкаталогах. Мне нравится держать их в одном каталоге по нескольким причинам.

+2

["если у вас есть молоток, все выглядит как гвоздь"] (http://en.wikipedia.org/wiki/Law_of_the_instrument) – paradigmatic

ответ

9

Вы должны использовать sbt или Maven для Scala. Они разработаны специально для работы Scala и Java, и их будет намного проще настроить и использовать. Они также предоставляют гораздо больше возможностей, чем делают.

Эти инструменты используются для самых разных целей. Компиляция является большой, но они также важны для управления зависимостями. Кроме того, sbt (и, вероятно, Maven?) Выполняет «инкрементную компиляцию», так что только переработанные классы перекомпилируются, что ускоряет компиляцию.

Я лично пользуюсь sbt, но я знаю людей, которые предпочитают Maven.

Смежные вопросы