Перспективные альтернативы? [закрыто]


83

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

Кто-нибудь нашел хорошие альтернативы, которые не усложняют проблему?


Разве ответ не будет сильно зависеть от того, в чем проблема? То, что я пытался с ним сделать, makeслишком упрощено.
Reinierpost

Ruby Rake, CoffeeScript Cake, Python Scons, Java Ant / Maven, C # MSBuild, кроссплатформенный CMake
FilBot3


makefile краток, но сам по себе является языком. Мне было трудно отлаживать. Для пользователей питона есть много пакетов , в том числе scons, luigi(адаптировано к shouldsee/luck), snakemake, waf. Есть много альтернатив Java, но это место слишком мало, чтобы записать их все.
увидеть

Я еще не пробовал, но github.com/casey/just звучит несколько многообещающе, "выдает подробные сообщения об ошибках и избегает особенностей make, поэтому отладка файла justfile проще и менее удивительна, чем отладка файла makefile"
д-р Ян-Филип Герке

Ответы:


30

проверьте SCons . Например, Doom 3 и Blender используют это.


+1 для scons - концептуально достаточно похоже, чтобы легко разобраться, но исправляет некоторые из наиболее сильно неработающих вещей в make (например, обработку пробелов в именах).
Том

5
SCons - это только Python 2, и, потратив несколько дней на использование SCons для компиляции версии Python 3 проекта, написанного на Python и C ++, я бы посоветовал людям держаться подальше. Просто используйте CMake, на данный момент он становится стандартом для C ++. Или, если вы хотите использовать систему сборки на основе Python, используйте Meson . Он быстро работает и активно развивается, чего нельзя сказать о SCons.
ostrokach

SCons поддерживает Python 3 с сентября 2017 года (через 5 месяцев после написания вышеупомянутого комментария) и является Python 3 только с версии 4.0 (июль 2020 года).
Майкл Плэтингс,

27

У меня много друзей, которые клянутся CMake в кроссплатформенной разработке:

http://www.cmake.org/

Это система сборки, используемая для VTK (помимо прочего), которая представляет собой библиотеку C ++ с кроссплатформенными привязками Python, Tcl и Java. Я думаю, что это, вероятно, наименее сложная вещь, которую вы найдете с таким количеством возможностей.

Вы всегда можете попробовать стандартные автоинструменты . Файлы Automake довольно легко собрать, если вы работаете только в Unix и придерживаетесь C / C ++. Интеграция сложнее, а autotools - далеко не самая простая система.


9
Обратите внимание, что CMake по-прежнему просто генерирует файлы сборки. Так что если проблема с реализацией GNU Make заключается в том, что он не может делать то, что вы хотите, то CMake, вероятно, вам не поможет. Или автоинструменты, если на то пошло.
Том

15
CMake не просто генерирует файлы сборки. CMake может генерировать множество различных типов файлов сборки для множества различных компиляторов и платформ. Лично я ненавижу CMake, потому что синтаксис конфигурации абсолютно отвратителен.
Taywee

19

doit - это инструмент на Python. Он основан на концепциях инструментов сборки, но более общих.

  • вы можете определить актуальность задачи / правила (не только проверять временные метки, целевые файлы не требуются)
  • зависимости могут быть рассчитаны динамически другими задачами
  • действия задачи могут быть функциями Python или командами оболочки

1
спасибо за этот ответ, doit выглядит как потрясающий инструмент
Бедрос

16

Некоторые проекты GNOME перешли на waf .

Он основан на Python, как и Scons, но также является автономным - поэтому вместо того, чтобы требовать от других разработчиков установки вашего любимого инструмента сборки, вы просто копируете автономный скрипт сборки в свой проект.


14

Рекомендую использовать Rake . Это самый простой инструмент, который я нашел.

Однако, если Ruby вам не нравится, я использовал следующие хорошие инструменты:

  • AAP (Python)
  • SCons (Python)
  • Ant (Java, конфигурация в XML, довольно сложная)

7

Помните об ninjaинструменте сборки (v1.8.2, сентябрь 2017 г.), на который влияют tupи redo.

Генератор файлов сборки cmake(например, для Unix Makefiles, Visual Studio, XCode, Eclipse CDT, ...) также может генерировать ninjaфайлы сборки, начиная с версии 2.8.8 (апрель 2012 г.) и, afaik, ninjaтеперь даже является инструментом сборки по умолчанию, используемым cmake.

Предполагается, что он превосходит makeинструмент (лучшее отслеживание зависимостей, а также распараллеливание).

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

Обратите внимание, что для c / c ++ улучшение времени компиляции иногда ограничено из-за заголовков, включенных через препроцессор (в частности, при использовании библиотек только для заголовков, например boost и eigen ), которые, надеюсь, будут заменены предложением модулей (в техническом обзоре C ++ 11 или, возможно, в C ++ 1y). Ознакомьтесь с этой презентацией, чтобы узнать подробнее об этой проблеме.


3
В частности, tupзависит от fuseтого, работает ли расширение ядра fuse, что, насколько я понимаю, предполагает, что сопровождающие ненормальные. redoне обновлялся два года. Рекомендую ninja.
mxcl 09

5

Я написал инструмент под названием sake, который пытался упростить чтение и запись вещей, подобных make-файлам.


Интересно; но не могли бы вы дать нам немного информации о том, почему, по вашему мнению, саке легче «читать и писать»? Нам не нужно устанавливать проект, чтобы увидеть, что он отвечает на вопрос.
Dour High Arch

Конечно! Мне показалось, что отчасти причина, по которой автор исходного вопроса был обеспокоен тем, что реализация Make "чрезмерно усложняет проблему", была связана с неясным синтаксисом make-файлов. Sake использует файлы, написанные на YAML, и, судя по тому, что я узнал из чужого ввода, их гораздо проще читать и писать.
tonyfischetti 08

Тот факт, что он использует синтаксис YAML, должен быть частью ответа, возможно, с некоторыми подробностями о том, как YAML контрастирует с makeсинтаксисом.
Аарон Новструп 09

Я просто использовал Sake для сценария сборки, и это здорово. Спасибо, что написали это!
nooblar

Саке удивительно простое.
Дэн

4

Это как бы зависит от того, что вы пытаетесь сделать. Если все, что вам нужно, это целевые зависимости в стиле make и вызов команд, то Make на самом деле является одним из лучших инструментов для этой задачи. :-) Рейк очень хорош, но в некоторых простых случаях может быть неуклюжим. Ant, конечно, многословный город, но он лучше поддерживает создание Java-подобных языков (включая Scala и Groovy). Также Ant доступен везде . Это основная причина, по которой я его использую. Поскольку он стабильно работает в Windows, он даже более кроссплатформенный, чем Make.

Если вы хотите управлять зависимостями для Java-подобных библиотек, Maven - это канонический выбор, но мне лично нравится Buildr намного больше. Это быстрее и проще в настройке (на основе Rake). К сожалению, он пока не так распространен, как Maven.



2

Я по-прежнему предпочитаю make после рассмотрения множества альтернатив. Когда вы автоматически генерируете зависимости через компилятор или что-то вроде fastdep, делать нечего. В частности, я не хочу, чтобы мой сценарий сборки был привязан к языку реализации, и мне не нравится писать что-то в XML, когда доступны более удобочитаемые альтернативы. Инструмент, который раскрывает язык общего назначения, имеет свои достоинства, а другой интерпретируемый язык - нет (afaik). Что не так с Make? может апеллировать к вашей точке зрения на отказ от make.

/ Аллан


Я также предпочитаю Make; это болотный стандарт, доступный повсюду, и есть разумная вероятность, что кто-то из новичков в проекте уже использовал его раньше (или, по крайней мере, шанс больше, чем что-либо еще). Но. У меня есть большая база кода (несколько тысяч исходных файлов на C ++), написанная для Visual C ++, которую я пытаюсь построить под GCC в Linux. Make казался очевидным выбором для инструмента сборки, и мы написали быстрый и грязный конвертер, который анализирует файлы vcxproj и создает файлы Makefile. Все было здорово, пока мы не попробовали это на проекте с пробелом в названии. Что нам делать?
Том

Для справки, я остановился на SCons. Поскольку наш конвертер в любом случае был написан на Python, было довольно легко преобразовать его в SConscript.
Том

@Tom где взять копию парсера файлов vcxproj? Я тоже работаю над небольшим проектом в Windows и хотел бы портировать его на Ubuntu.
Дэн

@Maverick - приношу свои извинения, это была собственность, и я больше там не работаю. Боюсь, воссоздать это нетривиально для сложных систем сборки; в то время как файл рабочей области VS представляет собой "просто XML", и выяснить, какие исходные файлы нужно создать и какие параметры применить, не так уж и сложно, вам необходимо принять во внимание конфигурации сборки (отладка, выпуск), а также то, что решение и отдельные проекты могут также импортировать произвольные другие файлы msbuild. Еще один вариант, который мы рассматривали, - это использование msbuild для GCC - и теперь вы можете найти это проще, поскольку с тех пор msbuild сильно повзрослел.
Том

1

FlowTracer от RTDA - еще один хороший выбор, который я видел коммерчески используемым в крупномасштабной среде (десятки тысяч заданий): http://www.rtda.com/flowtracer-design-flow-infrastructure-software

Он имеет графический интерфейс, который показывает граф зависимостей с цветными полями для заданий и овалами для файлов. Когда количество заданий и файлов становится большим, инструмент на основе графического интерфейса, такой как FlowTracer, становится очень важным.

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


0

Я не уверен, что вы задаете здесь правильный вопрос.

Вам нужна упрощенная модель? В этом случае вам нужно попросить кого-нибудь, кто хорошо знаком с make, создать серию (M | m) ake-файлов, которые упростят вашу задачу.

Или вы хотите взглянуть на базовую технологию? Хотим ли мы внедрить архитектуру типа «проектирование по контракту», которая встроена в дизайн кода и применяется в нем? Или, возможно, сам язык, например Ада и его концепция спецификаций (интерфейсов) и тел (реализаций)?

В каком направлении вы будете двигаться, это определенно повлияет на потенциальные результаты такого вопроса?

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

Извините, это не прямой ответ. Просто хотел попытаться заставить вас оценить, по какому пути вы хотите идти.

ура,

Роб


Простой ответ на сложный вопрос невозможен. Помогло бы уделение большего внимания вопросу.
Роб Уэллс,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.