Pracuję w c ++ głównie jako hobby (jestem jeszcze w szkole i dlatego nie mam prawdziwej pracy). IDE generują dla mnie plik makefile, dlatego zastanawiam się, czy warto nauczyć się, jak je tworzyć. Przez „warto się uczyć” mam na myśli, czy powinienem porzucić wszystko i nauczyć się je pisać przed kontynuowaniem nauki c ++? Czy nauczenie się ich będzie naprawdę konieczne? Jeśli tak, czy powinienem się o nich dowiedzieć (ogólna składnia i zrozumienie, jak działają itp.), Czy naprawdę nauczyć się je pisać?
12
Odpowiedzi:
Tak, zdecydowanie warto zrozumieć, jak działa Makefiles. Może nie być to dla ciebie istotne w tej chwili (ponieważ używasz IDE, które je generuje), ale są szanse, że wiedza będzie przydatna w przyszłości.
Szczerze mówiąc, to dziwne pojęcie „warte nauki” ...
Ale nie, nie sądzę, że musisz to zrobić.
Nie możemy przewidzieć, czy naprawdę będziesz potrzebować tej wiedzy w przyszłości. Zależy to od tego, czy kontynuujesz programowanie w C ++ i w jakim kontekście to robisz.
Poleciłbym oba. Jeśli nie możesz napisać pliku Makefile, dyskusyjne jest, że wiesz, co się dzieje.
Istnieje inny punkt widzenia, który mówi, że zbyt duża wiedza nie jest pomocna.
Jeśli zagłębisz się w to, dowiesz się, że istnieje wiele różnych wersji Make, a pisanie skomplikowanego pliku Makefile, który działa z wieloma wersjami Make na wielu platformach, jest ... trudne. Jednak w świecie open source, jest to „najlepsze praktyki” do wykorzystania narzędzi takich jak
automake
,autoconf
i tak dalej, aby wygenerować Makefile itd. Jeśli to zrobisz, wiele wersji / platforma związanej złożoności jest uregulowana za kulisami .Na koniec otagowałeś pytanie słowem „java”. Uważam, że nie powinieneś używać
make
do budowania aplikacji Java (chyba że budujesz również biblioteki kodów natywnych). Istnieją narzędzia do budowania specyficzne dla języka Java, które są znacznie łatwiejsze w użyciu ... i wykonują lepszą pracę niżmake
.źródło
Jeśli pracujesz z systemami operacyjnymi typu open source lub uniksowymi, tak. Pociesz się, nie są tak skomplikowane. Nauka
make
pozwoli Ci zaoszczędzić dużo czasu na dłuższą metę.źródło
Pliki makr są ważne w systemach UNIX (np. AIX, Linux, OS X). Myślę jednak, że ich absolutne znaczenie „musisz to wiedzieć” zmniejszyło się w ostatnich latach. Na przykład tak naprawdę nie można ich znaleźć w programowaniu systemu Windows (Visual Studio itp.), A XCode (w OS X) używa zupełnie innego systemu. Nie przepadam za Javą, ale myślę, że używają plików mrówek i tak dalej.
Istnieje bardzo fajny system o nazwie CMake, który generuje natywne pliki kompilacji dla systemu operacyjnego, na którym się uruchamiasz. Na przykład, jeśli napiszesz specyfikację projektu w CMake, możesz utworzyć projekt kompilacji Visual Studio w systemie Windows, projekt XCode na komputerze Mac i plik Makefile na systemie Linux. W pewnym sensie CMake zastępuje autoconf i automake.
Zwykle tworzę pliki CMake dla moich „dużych projektów”, ale wiem Make na wypadek, gdyby chciałem napisać „Makefile”. Jest dobry dla twojej znajomości kultury, ponieważ istnieje mnóstwo bibliotek oprogramowania, które używają Makefiles, i nieuchronnie będziesz musiał edytować określone kompilatory i lokalizacje bibliotek. Ale przekonasz się, że duże projekty (takie jak KDE) migrują w kierunku CMake i tym podobnych, ponieważ Make ma pewne ograniczenia, które odwracają ich brzydką głowę, gdy projekty stają się skomplikowane.
źródło
Jestem stronniczy, ponieważ uważam, że makefile to straszny system. Powinieneś nauczyć się ogólnej składni, aby móc modyfikować istniejący plik makefile. Ale nie wydaje mi się, że uczenie się wszystkiego na ten temat ani tworzenie od podstaw nie jest przydatne.
źródło
Podobnie jak w przypadku wielu aspektów wyjścia IDE, typowy automatycznie generowany plik makefile ma często nieefektywną strukturę.
Przy odpowiednim poziomie zrozumienia często można znacznie poprawić wydajność (szybsze kompilacje itp.). Jednak, chyba że naprawdę wiesz, co się dzieje, bardziej prawdopodobne jest, że FUBAR będzie majstrował przy pliku z autogenem.
Zdecydowanie polecam, aby zrozumieć, co się dzieje ... niezależnie od tego, czy zdecydujesz się rozpocząć edycję istniejącego, czy utworzyć własny, to osobny problem.
źródło
Możliwość skutecznego użycia
make
lub coś w tym rodzaju pozwala zaznaczyć pole „rozumie, jak modelować zależności między częściami programu złożonymi z więcej niż jednego modułu”.źródło
Nauka pisania plików Makefile jest dobrym pomysłem z wielu powodów.
źródło
Zawsze powinieneś próbować zrozumieć używany system kompilacji.
To niekoniecznie oznacza, że musisz być w stanie ręcznie utworzyć wszystkie pliki kompilacji. Ważną częścią jest zrozumienie, co robi system kompilacji dla twojego projektu i ogólna umiejętność ręcznego kompilowania małych projektów (jak w „wpisywaniu poleceń na terminalu”).
Po prostu myślę, że tworzenie (prostych) plików Makefile jest najłatwiejszym krokiem do zrozumienia, co się dzieje, ale możesz mieć inne sposoby zrozumienia, jak budować różne rzeczy.
Dlaczego / kiedy uczyć się Makefiles
Jeśli nadal programujesz tylko dla systemu Windows i nie oczekujesz, że ktokolwiek skompiluje Twój kod, możesz go skompilować tak, jak chcesz.
Jeśli chcesz zaprogramować kompilator jako agnostyczny (jak w „pozwól innym decydować, jakiego kompilatora lub IDE chcą użyć”), powinieneś nauczyć się innego systemu kompilacji niż pozwolić swojemu IDE „sobie z tym poradzić”.
Jeśli chcesz programować na różne platformy, z pewnością musisz użyć szeroko rozpowszechnionego systemu kompilacji.
To wciąż nie oznacza, że musisz dokładnie wiedzieć, jak działają automatycznie generowane pliki Makefile. Musisz tylko wiedzieć, jak działają pliki wejściowe dla systemu kompilacji. Zdarza się, że czasami mają podobną składnię.
Osobiście bardzo lubię Makefiles i używam ich do wielu rzeczy. Nie tylko kompilowanie kodu. Tworzę plik Makefile dla każdego większego pliku pdf, który tworzę (z LaTeX) i dla każdego projektu, w którym muszę zautomatyzować kilka zadań (budowanie, pakowanie, przesyłanie, aktualizacja zależności z repozytoriów źródłowych, ręczne kopie zapasowe pull / push)
Jednak dużo pracuję na terminalu i pracuję z Linuksem. Nie używam tak zwanego IDE innego niż vim (potężny edytor tekstu) i narzędzia konsoli. To może być dla ciebie zupełnie inne.
Jeśli kiedykolwiek narzekałeś na konieczność uruchamiania różnych powtarzających się poleceń tylko w celu „zaktualizowania” / pakietu / przesłania / .. „projektu”, to nauka pisania plików Makefiles może być dla Ciebie pomocna.
Jeśli masz i używasz narzędzi / GUI / IDE do wszystkiego, możesz nie wyciągnąć niczego z tej wiedzy.
źródło