Многообещающие альтернативы?

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

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


person mike511    schedule 15.09.2008    source источник
comment
Не будет ли ответ сильно зависеть от того, в чем проблема? Для того, что я пытался с ним сделать, make слишком упрощен.   -  person reinierpost    schedule 30.05.2012
comment
Ruby Rake, CoffeeScript Cake, Python Scons, Java Ant/Maven, C# MSBuild, кроссплатформенный CMake   -  person FilBot3    schedule 14.03.2016
comment
github.com/efimovalex/gomake   -  person Alex Efimov    schedule 16.02.2020
comment
makefile лаконичен, но это отдельный язык. Мне было трудно отлаживать. Для пользователей Python существует множество пакетов, включая scons, luigi (адаптированные к shouldsee/luck), snakemake, waf. Есть много альтернатив Java, но здесь слишком мало места, чтобы записать их все.   -  person shouldsee    schedule 07.05.2020
comment
Я еще не пробовал, но github.com/casey/just звучит многообещающе, выдает подробную ошибку сообщений и позволяет избежать особенностей make, поэтому отладка justfile проще и менее удивительна, чем отладка makefile   -  person Dr. Jan-Philip Gehrcke    schedule 21.07.2020


Ответы (12)


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

person WaldWolf    schedule 15.09.2008
comment
+1 за scons - концептуально достаточно похоже, чтобы легко было разобраться, но исправляет некоторые из наиболее серьезных проблем с make (например, обработку пробелов в именах). - person Tom; 07.08.2014
comment
SCons — это только Python 2, и, потратив несколько дней на использование SCons для компиляции версии Python 3 проекта, написанного на Python и C++, я бы посоветовал людям держаться подальше. Просто используйте CMake, на данный момент он становится стандартом для C++. Или, если вы хотите использовать систему сборки на основе Python, используйте Meson. Работает быстро и активно развивается, чего не скажешь о SCons. - person ostrokach; 15.04.2017
comment
SCons поддерживает Python 3 с сентября 2017 года (через 5 месяцев после написания комментария выше) и поддерживает Python 3 только с версии 4.0 (июль 2020 года). - person Michael Platings; 09.10.2020
comment
Интригующий. Возможно, вопрос основан на мнении, но голоса за ответы дают ответ на вопрос. После беглого взгляда кажется, что они прибили его. Ах да, и pip install scons (конечно, изнутри venv) работает как шарм. - person Sam; 14.06.2021

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

http://www.cmake.org/

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

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

person Todd Gamblin    schedule 15.09.2008
comment
Обратите внимание, что CMake по-прежнему просто генерирует make-файлы. Поэтому, если проблема с реализацией GNU Make заключается в том, что он не может делать то, что вам нужно, то CMake, вероятно, вам не поможет. Или автоинструменты, если уж на то пошло. - person Tom; 06.08.2014
comment
CMake не просто генерирует make-файлы. CMake может генерировать множество различных типов файлов сборки, предназначенных для множества разных компиляторов и платформ. Лично я ненавижу CMake, потому что синтаксис конфига абсолютно отвратительный. - person Taywee; 10.09.2016

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

  • вы можете определить, насколько актуальна задача/правило (не только проверка временных меток, целевые файлы не требуются)
  • зависимости могут быть вычислены динамически другими задачами
  • действия задачи могут быть функциями python или командами оболочки
person schettino72    schedule 30.03.2012
comment
спасибо за этот ответ, он выглядит как удивительный инструмент - person Bedros; 22.02.2018

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

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

person Eric Talevich    schedule 15.09.2008

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

Другие хорошие инструменты, которые я использовал, если вам не нравится Ruby, это:

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

Обратите внимание на инструмент сборки ninja (версия 1.8.2, сентябрь 2017 г.), на который повлиял tup и redo< /а>.

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

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

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

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

person Hotschke    schedule 21.03.2013
comment
Примечательно, что tup зависит от fuse и наличия работающего расширения ядра fuse, что, насколько я понимаю, предполагает, что сопровождающие сошли с ума. redo не обновлялся два года. Я бы рекомендовал ninja. - person mxcl; 09.04.2013

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

person tonyfischetti    schedule 08.01.2014
comment
Интересный; но не могли бы вы дать нам немного информации о том, почему, по вашему мнению, саке легче «читать и писать»? Нам не нужно устанавливать проект, чтобы увидеть, что он отвечает на вопрос. - person Dour High Arch; 08.01.2014
comment
Конечно! Мне показалось, что это одна из причин, по которой автор первоначального вопроса был обеспокоен реализацией Make, слишком усложняющей проблему, из-за неясного синтаксиса make-файлов. Sake использует файлы, написанные на YAML, и, судя по тому, что я понял из комментариев других людей, их намного проще читать и писать. - person tonyfischetti; 09.01.2014
comment
Тот факт, что он использует синтаксис YAML, должен быть частью ответа, возможно, с некоторыми уточнениями о том, как YAML отличается от синтаксиса make. - person Aaron Novstrup; 09.01.2014
comment
Я только что использовал Sake для сценария сборки, и это потрясающе. Спасибо, что написали это! - person nooblar; 17.12.2015
comment
Саке удивительно просто. - person Dan; 16.04.2018

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

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

person Daniel Spiewak    schedule 15.09.2008

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

/Аллан

person Allan Wind    schedule 15.09.2008
comment
Я также предпочитаю Make; это болотный стандарт, доступный везде, и есть разумный шанс, что любой новичок в проекте уже использовал его раньше (или, по крайней мере, больше шансов, чем что-либо еще). Но. У меня есть большая база кода (несколько тысяч исходных файлов C++), которая написана для Visual C++ и которую я пытаюсь собрать под GCC в Linux. Make казался очевидным выбором для инструмента сборки, и мы написали быстрый и грязный конвертер, который анализирует файлы vcxproj и создает файлы Makefile. Все было здорово, пока мы не попробовали это на проекте с пробелом в названии. Что мы должны делать? - person Tom; 06.08.2014
comment
Для справки, я остановился на SCons. Поскольку наш преобразователь в любом случае был написан на Python, было довольно легко преобразовать его в SConscript. - person Tom; 07.08.2014
comment
@ Том, где мы можем получить копию парсера файлов vcxproj? Я тоже работаю над небольшим проектом в Windows и хотел бы портировать его на Ubuntu. - person Dan; 16.04.2018
comment
@Maverick - мои извинения, это было собственностью, и я там больше не работаю. Боюсь, воссоздание его нетривиально для сложных систем сборки; в то время как файл рабочей области VS представляет собой просто XML, и выяснить, какие исходные файлы для сборки и какие параметры применить, не так уж и плохо, вам необходимо принять во внимание конфигурации сборки (отладка, выпуск), а также то, что решение и отдельные проекты также могут импортировать произвольные другие файлы msbuild. Другим вариантом, который мы рассматривали, было использование msbuild для нацеливания на GCC — и теперь вам может показаться, что это проще, поскольку с тех пор msbuild сильно повзрослел. - person Tom; 24.04.2018

Система make в Ruby называется rake: http://rake.rubyforge.org/

Выглядит весьма многообещающе.

Всегда есть Ant: http://ant.apache.org, который я лично нахожу ужасным. Однако это стандарт де-факто для разработки на Java.

person davetron5000    schedule 15.09.2008

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

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

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

person bu11d0zer    schedule 29.05.2012

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

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

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

Какое направление вы после определенно повлияет на потенциальные результаты такого вопроса?

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

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

ваше здоровье,

Роб

person Rob Wells    schedule 15.09.2008
comment
Простой ответ на сложный вопрос невозможен. Предоставление большего внимания в вопросе поможет. - person Rob Wells; 07.03.2018