Obiecująca alternatywa? [Zamknięte]

83

Używam make i makefiles od wielu lat i chociaż koncepcja jest rozsądna, implementacja ma coś do życzenia.

Czy ktoś znalazł jakieś dobre alternatywy, które nie komplikują nadmiernie problemu?

mike511
źródło
Czy odpowiedź nie będzie silnie zależeć od tego, na czym polega problem? To, co próbowałem z nim zrobić, makejest zbyt uproszczone.
reinierpost
Ruby Rake, CoffeeScript Cake, Python Scons, Java Ant / Maven, C # MSBuild, wieloplatformowy CMake
FilBot3
makefile jest zwięzły, ale sam w sobie jest językiem. Trudno było debugować. Dla użytkowników Pythona istnieje wiele pakietów w tym scons, luigi(dostosowany do shouldsee/luck) snakemake, waf. Istnieje wiele alternatyw dla języka Java, ale ta przestrzeń jest zbyt mała, aby je wszystkie zapisać.
powinien zobaczyć
Jeszcze tego nie próbowałem, ale github.com/casey/just brzmi nieco obiecująco, „generuje szczegółowe komunikaty o błędach i unika dziwactw make, więc debugowanie justfile jest łatwiejsze i mniej zaskakujące niż debugowanie pliku makefile”
Dr Jan-Philip Gehrcke

Odpowiedzi:

30

sprawdź SCons . Na przykład Doom 3 i Blender wykorzystują to.

WaldWolf
źródło
+1 dla scons - koncepcyjnie na tyle podobny, że łatwo jest się skupić, ale naprawia niektóre z bardziej zepsutych rzeczy dotyczących marki (takie jak obsługa spacji w nazwach).
Tom
5
SCons to tylko Python 2 i po zmarnowaniu dni na używanie SCons do skompilowania wersji Python 3 projektu napisanego w Pythonie i C ++, radziłbym ludziom trzymać się z daleka. Po prostu użyj CMake, w tym momencie staje się standardem dla C ++. Lub jeśli chcesz użyć systemu budowania opartego na Pythonie, użyj Mesona . Działa szybko i jest aktywnie rozwijany, czego nie można powiedzieć o SCons.
ostrokach
SCons wspiera Python 3 od września 2017 (5 miesięcy po napisaniu powyższego komentarza) i jest Pythonem 3 dopiero od wersji 4.0 (lipiec 2020).
Michael Platings
27

Mam wielu przyjaciół, którzy przysięgają, że CMake będzie działać na wiele platform:

http://www.cmake.org/

Jest to system kompilacji używany między innymi dla VTK , który jest biblioteką C ++ z wieloplatformowymi powiązaniami Python, Tcl i Java. Myślę, że jest to prawdopodobnie najmniej skomplikowana rzecz, jaką znajdziesz przy tak wielu możliwościach.

Zawsze możesz wypróbować standardowe narzędzia automatyczne . Pliki Automake są dość łatwe do złożenia, jeśli używasz tylko systemu Unix i jeśli trzymasz się C / C ++. Integracja jest bardziej skomplikowana, a narzędzia automatyczne są dalekie od najprostszego systemu w historii.

Todd Gamblin
źródło
9
Zauważ, że CMake nadal generuje tylko pliki makefile. Więc jeśli problem z implementacją GNU Make polega na tym, że nie może zrobić czegoś, czego chcesz, CMake prawdopodobnie ci nie pomoże. Albo autotools, jeśli o to chodzi.
Tom
15
CMake nie tylko generuje pliki makefile. CMake może generować mnóstwo różnych rodzajów plików kompilacji przeznaczonych dla wielu różnych kompilatorów i platform. Osobiście nienawidzę CMake, ponieważ składnia konfiguracji jest absolutnie obrzydliwa.
Taywee
19

doit to narzędzie w języku Python. Opiera się na koncepcjach narzędzi do kompilacji, ale jest bardziej ogólny.

  • możesz określić, jak zadanie / reguła jest aktualna (nie tylko sprawdzanie znaczników czasu, pliki docelowe nie są wymagane)
  • zależności mogą być obliczane dynamicznie przez inne zadania
  • akcjami zadania mogą być funkcje Pythona lub polecenia powłoki
schettino72
źródło
1
dziękuję za odpowiedź, doit wygląda jak niesamowite narzędzie
Bedros
16

Niektóre projekty GNOME migrowały do waf .

Jest oparty na Pythonie, podobnie jak Scons, ale także samodzielny - więc zamiast wymagać od innych programistów zainstalowania Twojego ulubionego narzędzia do kompilacji, wystarczy skopiować samodzielny skrypt kompilacji do swojego projektu.

Eric Talevich
źródło
14

Polecam rake . To najłatwiejsze narzędzie, jakie znalazłem.

Inne dobre narzędzia, których użyłem, jeśli nie lubisz Rubiego, to:

  • AAP (Python)
  • SCons (Python)
  • Ant (Java, konfiguracja w XML, dość złożona)
Clinton Dreisbach
źródło
7

Pamiętaj o ninjanarzędziu do kompilacji (wersja 1.8.2, wrzesień 2017 r.), Na które mają wpływ tupi redo.

Generator plików kompilacji cmake(np. Dla Unix Makefiles, Visual Studio, XCode, Eclipse CDT, ...) może również generować ninjapliki kompilacji od wersji 2.8.8 (kwiecień 2012) i, afaik, ninjajest teraz nawet domyślnym narzędziem do kompilacji używanym przez cmake.

Ma on przewyższać makenarzędzie (lepsze śledzenie zależności i jest równoległy).

cmaketo już ugruntowane narzędzie. Zawsze możesz wybrać później narzędzie do kompilacji bez modyfikowania plików konfiguracyjnych. Jeśli więc w przyszłości zostanie opracowana lepsza kompilacja, która będzie obsługiwana przez cmakeCiebie, możesz wygodnie na nią przejść.

Zwróć uwagę, że w przypadku c / c ++ czas kompilacji jest czasami ograniczony z powodu nagłówków zawartych w preprocesorze (w szczególności podczas korzystania z bibliotek zawierających tylko nagłówki, na przykład boost i eigen ), które, miejmy nadzieję, zostaną zastąpione propozycją modułów (w przeglądzie technicznym of c ++ 11 lub ostatecznie w c ++ 1y). Sprawdź tę prezentację, aby uzyskać szczegółowe informacje na ten temat.

Hotschke
źródło
3
W szczególności tupzależy od fusei posiadanie uruchomionego rozszerzenia jądra fuse, co, o ile mi wiadomo, sugeruje, że opiekunowie są szaleni. redonie był aktualizowany od dwóch lat. Polecam ninja.
mxcl
5

Napisałem narzędzie o nazwie sake, które próbowało uczynić pisanie rzeczy podobnych do pliku makefile bardzo łatwymi do czytania i pisania.

tonyfischetti
źródło
Ciekawy; ale czy możesz nam dać trochę informacji, dlaczego Twoim zdaniem sake jest łatwiejsze do „czytania i pisania”? Nie powinniśmy musieć instalować projektu, aby zobaczyć, jak odpowiada na pytanie.
Dour High Arch,
Pewnie! Wydawało mi się, że jednym z powodów, dla których autor pierwotnego pytania był zaniepokojony „nadmiernym komplikowaniem problemu” przez implementację programu Make, była niejasna składnia plików makefiles. Sake używa plików, które są napisane w YAML i, z tego, co zebrałem na podstawie danych wejściowych innych ludzi, są znacznie prostsze do czytania i pisania.
tonyfischetti
Fakt, że używa składni YAML, powinien być częścią odpowiedzi, być może z pewnym wyjaśnieniem, jak YAML różni się od makeskładni.
Aaron Novstrup,
Właśnie użyłem Sake do skryptu kompilacji i jest niesamowity. Dziękuje za napisanie tego!
nooblar
Sake jest niesamowicie proste.
Dan
4

To w pewnym sensie zależy od tego, co próbujesz zrobić. Jeśli wszystko, czego potrzebujesz, to zależności docelowe w stylu make i wywołanie poleceń, to Make jest w rzeczywistości jednym z lepszych narzędzi do tego zadania. :-) Rake jest bardzo fajny, ale w niektórych prostych przypadkach może być niezręczny. Ant jest oczywiście miastem gadatliwości, ale ma lepsze wsparcie dla budowania języków podobnych do Java (w tym Scala i Groovy). Ponadto Ant jest dostępny wszędzie . To jest główny powód, dla którego go używam. Ponieważ działa konsekwentnie w systemie Windows, w rzeczywistości jest nawet bardziej wieloplatformowy niż Make.

Jeśli chcesz zarządzać zależnościami dla bibliotek typu Java, Maven jest kanonicznym wyborem, ale osobiście wolę Buildr o wiele bardziej. Jest szybszy i dużo łatwiejszy do dostosowania (oparty na Rake'u). Niestety, nie jest jeszcze tak wszechobecny jak Maven.

Daniel Śpiewak
źródło
2

Nadal wolę robić po rozważeniu kilku alternatyw. Kiedy automatycznie generujesz zależności za pośrednictwem kompilatora lub czegoś takiego jak fastdep, nie pozostaje wiele do zrobienia. W szczególności nie chcę, aby mój skrypt kompilacji był powiązany z językiem implementacji i nie lubię pisać rzeczy w XML, gdy dostępne są bardziej czytelne alternatywy. Narzędzie, które ujawnia język ogólnego przeznaczenia, ma jednak swoje zalety, ale inny język interpretowany nie (afaik). Co jest nie tak z marką? może przemówić do twojego punktu widzenia odejścia od marki.

/ Allan

Allan Wind
źródło
Wolę też Make; Jest to standard bagienny, dostępny wszędzie i istnieje spora szansa, że ​​ktoś nowy w projekcie użył go wcześniej (lub przynajmniej ma większą szansę niż cokolwiek innego). Ale. Mam dużą bazę kodu (kilka tysięcy plików źródłowych C ++), która jest napisana dla Visual C ++ i którą próbuję zbudować pod GCC na Linuksie. Make wydawało się oczywistym wyborem dla narzędzia do budowania i napisaliśmy szybki i brudny konwerter, który analizuje pliki vcxproj i tworzy pliki Makefile. Wszystko było świetne, dopóki nie wypróbowaliśmy tego w projekcie ze spacją w nazwie. Co mamy zrobić?
Tom
Dla przypomnienia, skończyłem na SCons. Ponieważ nasz konwerter i tak został napisany w Pythonie, dość łatwo było przekonwertować go na skrypt SConscript.
Tom
@Tom skąd możemy pobrać kopię parsera plików vcxproj? Ja też pracuję nad małym projektem w systemie Windows i chciałbym przenieść go na Ubuntu.
Dan
@Maverick - przepraszam, to było prawnie zastrzeżone i już tam nie pracuję. Obawiam się, że odtworzenie go nie jest trywialne w przypadku złożonych systemów kompilacji; podczas gdy plik obszaru roboczego VS to „tylko XML”, a ustalenie, które pliki źródłowe zbudować i jakie opcje zastosować, nie jest zbyt trudne, należy wziąć pod uwagę konfiguracje kompilacji (debugowanie, wydanie), a także to, że rozwiązanie i poszczególne projekty mogą importuj również dowolne inne pliki msbuild. Inną opcją, którą rozważaliśmy, było użycie msbuild do kierowania na GCC - i może to być teraz łatwiejsze, ponieważ od tego czasu msbuild bardzo się rozwinął.
Tom
1

FlowTracer od RTDA to kolejny dobry wybór, który widziałem używany komercyjnie w środowisku na dużą skalę (dziesiątki tysięcy miejsc pracy): http://www.rtda.com/flowtracer-design-flow-infrastructure-software

Ma GUI, który pokazuje wykres zależności z kolorowymi polami dla zadań i owali dla plików. Kiedy liczba zadań i plików rośnie, narzędzie oparte na graficznym interfejsie użytkownika, takie jak FlowTracer, jest prawie niezbędne.

Początkowy koszt instalacji jest wyższy niż w przypadku marki. Istnieje krzywa uczenia się, jak skonfigurować pierwszy przepływ przy jego użyciu. Potem robi się szybciej.

bu11d0zer
źródło
0

Nie jestem pewien, czy zadajesz tutaj właściwe pytanie.

Szukasz uproszczonej wersji? W takim przypadku musisz poprosić kogoś, kto jest bardzo zaznajomiony z make, aby utworzył serię (M | m) akefile, która uprości twój problem.

A może chcesz przyjrzeć się podstawowej technologii? Czy chcemy wymusić architekturę typu projekt według kontraktu, która jest wbudowana i wymuszana w projekcie kodu? A może sam język, np. Ada i jego koncepcja specyfikacji (interfejsów) i treści (implementacji)?

W jakim kierunku się podążacie, z pewnością wpłynie na potencjalne skutki takiego pytania?

Zasadniczo nowe sposoby budowania systemów tylko z tych komponentów, które naprawdę się zmieniły, w porównaniu z przyjęciem nowych technologii, które mają takie mechanizmy wbudowane w projekcie.

Przepraszam, że to nie jest bezpośrednia odpowiedź. Chciałem tylko spróbować przekonać cię do oceny, którą ścieżką chcesz iść.

Twoje zdrowie,

Obrabować

Rob Wells
źródło
Prosta odpowiedź na złożone pytanie nie jest możliwa. Większa koncentracja na pytaniu pomogłaby.
Rob Wells,