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


83

Я використовую make і makefiles вже багато років, і хоча концепція обґрунтована, реалізації є що бажати.

Хтось знайшов якісь хороші альтернативи, які б не ускладнювали проблему?


Чи відповідь не буде сильно залежати від того, в чому проблема? Адже речі, які я намагався з цим зробити, 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 для шкурок - концептуально достатньо схожий, щоб легко розводити голову, але виправляє деякі найбільш важко розбиті речі про make (наприклад, обробку пробілів в іменах).
Том,

5
SCons - це лише Python 2, і, витративши дні, використовуючи SCons для компіляції версії Python 3 проекту, написаного на Python та C ++, я порадив би людям триматися подалі. Просто використовуйте CMake, і на даний момент це стає стандартом для C ++. Або якщо ви хочете використовувати систему побудови на основі Python, використовуйте Meson . Він працює швидко і активно розробляється, чого не можна сказати про SCons.
острокач

SCons підтримує Python 3 з вересня 2017 року (через 5 місяців після написання вищезазначеного коментаря) і є Python 3 лише з версії 4.0 (липень 2020).
Michael Platings

27

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

http://www.cmake.org/

Це система збірки, яка використовується для VTK (серед іншого), це бібліотека C ++ з міжплатформеними прив'язками Python, Tcl та Java. Я думаю, що це, мабуть, найменш складне, що ви знайдете з такою кількістю можливостей.

Ви завжди можете спробувати стандартні автоінструменти . Файли автоматичного створення досить легко скласти, якщо ви працюєте лише на Unix і якщо дотримуєтесь C / C ++. Інтеграція є більш складною, а автоінструменти - далеко не найпростіша система.


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

15
CMake не просто генерує make-файли. CMake може генерувати багато різних файлів збірки, націлених на тонни різних компіляторів та платформ. Особисто я ненавиджу CMake, тому що синтаксис конфігурації абсолютно огидний.
Тайві

19

doit - це інструмент python. Він базується на концепціях будівельних інструментів, але більш загальних.

  • Ви можете визначити, наскільки завдання / правило є сучасним (не просто перевіряючи мітки часу, цільові файли не потрібні)
  • залежності можуть динамічно обчислюватися іншими завданнями
  • Діями завдання можуть бути функції python або команди оболонки

1
дякую за цю відповідь, doit виглядає як дивовижний інструмент
Бедрос

16

Деякі проекти GNOME переходять на waf .

Він заснований на Python, як і Scons, але також є автономним - отже, замість того, щоб вимагати, щоб інші розробники встановлювали ваш улюблений інструмент збірки, ви просто копіюєте окремий сценарій збірки у свій проект.


14

Я рекомендую використовувати Rake . Це найпростіший інструмент, який я знайшов.

Іншими хорошими інструментами, якими я скористався, якщо Рубі не твоя річ, є:

  • 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 р.), І, на жаль, ninjaзараз він навіть є інструментом побудови за замовчуванням, який використовується cmake.

Передбачається, що він перевершить makeінструмент (краще відстеження залежностей та паралелізація).

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

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


3
Зокрема, це tupзалежить від fuseзапущеного розширення ядра запобіжника, яке, на мій погляд, припускає, що супровідники є гайками. redoне оновлювався два роки. Я б порекомендував ninja.
mxcl

5

Я написав інструмент " саке", який намагався зробити написання подібних до файлів файлів дуже простим для читання та запису.


Цікаво; але чи можете ви дати нам трохи інформації про те, чому, на вашу думку, саке легше «читати і писати»? Нам не потрібно встановлювати проект, щоб він відповідав на запитання.
Dour High Arch

Звичайно! Для мене це звучало як частина причини, чому автор оригінального запитання був стурбований реалізацією Македа "надмірним ускладненням проблеми" через незрозумілий синтаксис make-файлів. Саке використовує файли, які написані YAML, і, на основі того, що я збираю з чужих даних, набагато простіше читати та писати.
tonyfischetti

Той факт, що він використовує синтаксис YAML, повинен бути частиною відповіді, можливо, з деякою деталізацією того, як YAML контрастує із makeсинтаксисом.
Аарон Новструп

Я просто використовував Sake для сценарію збірки, і це чудово. Дякуємо, що написали!
nooblar

Саке надзвичайно простий.
Ден

4

Це як би залежить від того, що ви намагаєтесь зробити. Якщо все, що вам потрібно, це цільові залежності у стилі make та виклик команди, то Make насправді є одним з кращих інструментів для завдання. :-) Граблі дуже приємні, але можуть бути незграбними в деяких простих випадках. Ant, звичайно, багатослівне місто, але він має кращу підтримку для побудови Java-подібних мов (Scala та Groovy в тому числі). Також Мураха доступний скрізь . Це головна причина, якою я її використовую. Оскільки він стабільно працює в Windows, насправді він навіть більш платформенний, ніж Make.

Якщо ви хочете керувати залежностями для Java-подібних бібліотек, Maven - це канонічний вибір, але мені особисто сподобався Buildr набагато краще. Це швидше і набагато легше налаштувати (воно базується на Rake). На жаль, це ще не все так широко, як Maven.


2

Система виготовлення Ruby називається рейком: http://rake.rubyforge.org/

Виглядає досить перспективно.

Завжди є Ant: http://ant.apache.org , який я особисто вважаю жахливим. Однак це фактичний стандарт для розробки Java.


2

Я все ще вважаю за краще робити, розглянувши купу альтернатив. Коли ви автоматично генеруєте залежності через компілятор або щось на зразок fastdep, вам не залишається багато чого зробити. Зокрема, я не хочу, щоб мій сценарій збірки був прив’язаний до мови реалізації, і мені не подобається писати матеріали в XML, коли доступні більш читабельні альтернативи. Інструмент, що викриває мову загального призначення, має переваги, проте інша інтерпретована мова цього не робить (afaik). Що не так із Make? може звернутися до вашої точки зору щодо відходу від марки.

/ Аллан


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

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

@ Том, де ми можемо отримати копію синтаксичного аналізатора файлів vcxproj? Я теж працюю над невеликим проектом для Windows і хотів би перенести на ubuntu.
Ден,

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

1

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

Він має графічний інтерфейс, який показує графік залежностей із кольоровими кодами для завдань та овалами для файлів. Коли кількість завдань і файлів стає високим, інструмент на основі графічного інтерфейсу, такий як FlowTracer, дуже важливий.

Початкова вартість встановлення вище, ніж Make. Існує крива навчання для налаштування вашого першого потоку, використовуючи його. Після цього він стає швидшим.


0

Я не впевнений, що ви задаєте тут правильне запитання.

Ви бажаєте спрощеної марки? У такому випадку вам потрібно змусити когось, хто дуже добре знайомий, створити серію (M | m) акефайлів, які спростять вашу проблему.

Або ви хочете розглянути основну технологію? Чи хочемо ми запровадити архітектуру типу проектування за контрактом, яка вбудована та впроваджена в дизайн коду? Або, можливо, сама мова, наприклад, Ada та її концепція специфікацій (інтерфейсів) та тіл (реалізації)?

Який напрямок ви домагаєтесь, безумовно, вплине на потенційні результати такого питання?

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

Вибачте, це не пряма відповідь. Просто хотів спробувати, щоб ти оцінив, яким шляхом ти хотів піти далі.

ура,

Роб


Проста відповідь на складне запитання неможлива. Забезпечення більшої уваги у питанні допомогло б.
Роб Веллс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.