Jakie są różnice między Autotools, Cmake i Scons?
Jakie są różnice między Autotools, Cmake i Scons?
Odpowiedzi:
W rzeczywistości „jedyną prawdziwą„ łaską oszczędzającą ”Autotools jest to, że w dużej mierze wykorzystują to wszystkie projekty GNU.
Problemy z narzędziami automatycznymi:
Działa ... przez większość czasu ... to wszystko, co możesz powiedzieć o Autotools. To system, który rozwiązuje kilka problemów, które tak naprawdę dotyczą tylko projektu GNU ... dla ich podstawowego, podstawowego kodu łańcucha narzędzi. (Edytuj (24.05.2014): Należy zauważyć, że tego rodzaju obawy są potencjalnie ZŁĄ rzeczą, o którą należy się martwić - Heartbleed częściowo wywodzi się z tego myślenia i przy prawidłowych, nowoczesnych systemach, naprawdęnie masz nic wspólnego z tym, co koryguje Autotools. GNU prawdopodobnie musi zrobić cruft usuwanie bazy kodu, w świetle tego, co stało się z Heartbleed) Możesz go użyć do wykonania swojego projektu i może działać dobrze w przypadku niewielkiego projektu, który nie powinien działać nigdzie indziej niż Linux lub gdzie łańcuch narzędzi GNU wyraźnie działa poprawnie. Stwierdzenie, że „ładnie integruje się z Linuksem” jest dość odważnym stwierdzeniem i dość niepoprawnym . Całkiem dobrze integruje się z narzędziem GNU i rozwiązuje problemy IT z celami.
Nie oznacza to, że nie ma problemów z innymi opcjami omawianymi w tym wątku.
SCons jest raczej zamiennikiem Make / GMake / etc. i wygląda całkiem ładnie, zważywszy na wszystko Jednak ...
Przykłady podane dla CMake w tym wątku są nieco fałszywe.
Jednak...
Prawdę mówiąc, twoje cele powinny decydować o tym, co wybierzesz tutaj.
Istnieje wiele powodów, dla których wiele projektów porzuca qmake, narzędzia automatyczne itp. I przenosi się do CMake. Do tej pory mogę spokojnie oczekiwać, że projekt oparty na CMake wpadnie w sytuację kompilacji krzyżowej lub w konfigurację VisualStudio lub będzie potrzebował tylko niewielkiej ilości czyszczenia, ponieważ projekt nie uwzględniał części tylko dla systemu Windows lub OSX do bazy kodów. Nie mogę się spodziewać, że z projektu opartego na SCons - i w pełni oczekuję, że 1/3 lub więcej projektów Autotools popełniło COŚ błędnego, co wyklucza budowanie poprawnie w dowolnym kontekście, z wyjątkiem jednego budującego hosta lub Scratchbox2.
Należy rozróżnić, kto korzysta z narzędzi. Cmake to narzędzie, z którego musi korzystać użytkownik podczas tworzenia oprogramowania. Narzędzia automatyczne służą do generowania tarballa dystrybucyjnego, którego można użyć do zbudowania oprogramowania przy użyciu tylko standardowych narzędzi dostępnych w dowolnym systemie zgodnym z SuS. Innymi słowy, jeśli instalujesz oprogramowanie z tarballa, który został zbudowany przy użyciu narzędzi automatycznych, nie używasz narzędzi automatycznych . Z drugiej strony, jeśli instalujesz oprogramowanie korzystające z Cmake, to używasz Cmake i musisz go zainstalować, aby zbudować oprogramowanie.
Zdecydowana większość użytkowników nie musi mieć zainstalowanych narzędzi automatycznych na swoich urządzeniach. Historycznie było wiele nieporozumień, ponieważ wielu programistów rozpowszechnia źle sformułowane pliki archiwów, które zmuszają użytkownika do uruchomienia autoconf w celu zregenerowania skryptu konfiguracyjnego, co jest błędem podczas pakowania. Więcej zamieszania spowodował fakt, że większość głównych dystrybucji Linuksa instaluje wiele wersji autotools, kiedy domyślnie nie powinny instalować żadnej z nich. Jeszcze więcej zamieszania powodują programiści próbujący używać systemu kontroli wersji (np. Cvs, git, svn) do dystrybucji swojego oprogramowania, a nie budowania archiwów.
asciidoc
lub help2man
lub doxygen
, co ważniejsze, prawidłowej kombinacji narzędzia automatycznego. Był to ogromny problem marketingowy dla narzędzi automatycznych. Użytkownicy błędnie sądzą, że potrzebują zainstalowanej funkcji autoconf, ponieważ nie rozumieją różnicy między pakietem archiwalnym a VCS.
Nie chodzi o standardy kodowania GNU.
Obecne zalety autotools - szczególnie w połączeniu z automake - polegają na tym, że bardzo dobrze integrują się one z budowaniem dystrybucji Linuksa.
Na przykład w przypadku cmake zawsze „potrzebowałem -DCMAKE_CFLAGS lub -DCMAKE_C_FLAGS?” Nie, to nie jest, to „-DCMAKE_C_FLAGS_RELEASE”. Lub -DCMAKE_C_FLAGS_DEBUG. Jest to mylące - w autoconf jest to po prostu ./configure CFLAGS = "- O0 -ggdb3" i masz go.
W integracji z infrastrukturami kompilacyjnymi scons ma problem, którego nie można użyć make %{?_smp_mflags}
, _smp_mflags
w tym przypadku jest to makro RPM, które z grubsza rozwija się (administrator może to ustawić) moc systemu. Ludzie umieszczają tutaj takie rzeczy jak -jNCPUS w swoim środowisku. W przypadku scons, które nie działają, więc pakiety korzystające z scons mogą być seryjnie wbudowane tylko w dystrybucje.
./configure CFLAGS=-O0
często zawodzi w przypadku pakietów, które zastępują CFLAGS w pliku makefile i wymagają zamiast tego uruchomienia użytkownika ./configure --enable-debug
. (np tmux
.).
Ważne jest, aby wiedzieć o Autotools, że nie są one ogólnym systemem kompilacji - implementują standardy kodowania GNU i nic więcej. Jeśli chcesz stworzyć pakiet zgodny ze wszystkimi standardami GNU, Autotools są doskonałym narzędziem do tego zadania. Jeśli tego nie zrobisz, powinieneś użyć Scons lub CMake. (Na przykład zobacz to pytanie .) To powszechne nieporozumienie jest źródłem frustracji związanej z Autotools.
AUTOMAKE_OPTIONS = -foreign
w swoim Makefile.am
. (Lub -foreign
w twoim autogen.sh
. Myślę, że prawie wszyscy tego używają.)
installcheck
i distclean
. Jeśli spróbujesz zmienić tego rodzaju zachowanie podczas korzystania z Autotools, po prostu marnujesz swój czas.
Podczas gdy z punktu widzenia programistów cmake jest obecnie najłatwiejszy w użyciu, z punktu widzenia użytkownika narzędzia automatyczne mają jedną wielką zaletę
narzędzia automatyczne generują pojedynczy skrypt konfiguracyjny pliku, a wszystkie pliki do jego wygenerowania są dostarczane z dystrybucją. łatwo to zrozumieć i naprawić za pomocą grep / sed / awk / vi. Porównaj to z Cmake, gdzie w / usr / share / cmak * / Modules znajduje się wiele plików, których użytkownik nie może naprawić, chyba że ma on uprawnienia administratora.
Tak więc, jeśli coś nie do końca działa, zwykle można je łatwo „naprawić” za pomocą standardowych narzędzi uniksowych (grep / sed / awk / vi itd.) W sposób młotkowy, bez konieczności rozumienia systemu kompilacji.
Czy kiedykolwiek przekopałeś się przez katalog budowania cmake, aby dowiedzieć się, co jest nie tak? W porównaniu z prostym skryptem powłoki, który można odczytać od góry do dołu, śledzenie wygenerowanych plików Cmake w celu ustalenia, co się dzieje, jest dość trudne. Również w przypadku CMake dostosowanie plików FindFoo.cmake wymaga nie tylko znajomości języka CMake, ale może również wymagać uprawnień administratora.