2013-05-19 8 views
7

Wiem, że proces instalacji ze źródła są.dlaczego "make" przed "make install"

  1. ./configure
  2. zrobić
  3. make install

ale dlaczego "zrobić" przed "make install", dlaczego po prostu nie ma "make install"

mojego zrozumienia tak daleko jest "make" tylko skompiluj źródło do pliku wykonywalnego, a "make install" faktycznie umieści je w wykonywalnym folderze PATH, mam rację?

Może nie wyjaśniłem pytania i przepraszam za to.

że chcemy zainstalować plik wykonywalny na komputerze, możemy po prostu zrobić

  1. ./configure
  2. make install

zamiast 3 krokach przedstawionych powyżej.

Odpowiedz

10

Po uruchomieniu make poinstruowano go, aby zasadniczo postępował zgodnie z zestawem kroków kompilacji dla określonego celu. Kiedy jest wywoływana bez parametrów, uruchamia pierwszy cel, który zwykle po prostu kompiluje projekt. make install mapy do celu install, które zwykle nie robią nic więcej niż kopiowanie plików binarnych do miejsc docelowych.

Często cel install zależy od celu kompilacji, więc możesz uzyskać te same wyniki, uruchamiając tylko make install. Jednak widzę co najmniej jeden dobry powód, aby zrobić to w oddzielnych krokach: separacja uprawnień.

Zazwyczaj po zainstalowaniu oprogramowania przechodzi do lokalizacji, do których zwykli użytkownicy nie mają prawa zapisu (np. /usr/bin i /usr/local/bin). Często kończy się to koniecznością uruchomienia make, a następnie sudo make install, ponieważ krok instalacji wymaga eskalacji uprawnień. Jest to "Good Thing ™", ponieważ pozwala na kompilowanie twojego oprogramowania jako zwykłego użytkownika (co faktycznie robi różnicę dla niektórych projektów), ograniczając zakres potencjalnych szkód w źle postępującej procedurze kompilacji i uzyskuje tylko root uprawnienia do etapu instalacji.

+0

Tylko jedna uwaga: "make" bez żadnych komentarzy pominie wszelkie obiekty wieloznaczne. "%" jest równoważne regexowi "+" dla nazw docelowych. Dawny. jeśli masz 3 cele: 1) "% _targetsuffix:" 2) ​​"wildTarget:" 3) "defaultTarget:" w tej kolejności przechodząc od góry do dołu. Polecenie "make" pominie "% _youtargetsuffic:" i zbuduje "wildTarget:" ("defaultTarget:" zostanie zignorowane, ponieważ "wildTarget:" jest przed nim). Niestety nie wiem, jak sformatować komentarze, aby były bardziej czytelne. – funa68

0

Wiele programów w dzisiejszych czasach zrobi dobrze, mając tylko make install. W tych, które nie będą, cel instalacji nie ma zależności od skompilowanych plików binarnych. Aby grać bezpiecznie, większość ludzi używa make && make install lub jej odmiany tylko po to, aby być bezpiecznym.

3

make bez parametrów wykonuje ./Makefile (lub ./makefile) i tworzy pierwszy celu. Zgodnie z konwencją może to być cel docelowy, ale niekoniecznie. make install buduje specjalny cel, zainstaluj. Zgodnie z konwencją zajmuje to wynik make all i instaluje je na bieżącym komputerze.

Nie każdy potrzebuje make install. Na przykład, jeśli tworzysz jakąś aplikację internetową, która ma zostać wdrożona na innym serwerze, lub jeśli korzystasz z cross-kompilatora (np. Tworzysz aplikację dla systemu Android na komputerze z systemem Linux), nie ma sensu uruchamianie make install.

W większości przypadków pojedyncza linia ./configure && make all install będzie odpowiednikiem opisywanego przez ciebie trzystopniowego procesu, ale zależy to od produktu, od Twoich konkretnych potrzeb, i znowu jest to tylko konwencja.

1

Czasami chcę spróbować skompilować zmiany w kodzie, ale nie wdrażać tych zmian. Na przykład, jeśli włamuję się do podstawy kodu A w Asterisk i chcę się upewnić, że zmiany, które wprowadzam, nadal się kompilują, zapiszę i uruchom make. Jednak nie chcę wdrażać tych zmian, ponieważ nie skończyłem kodowania.

Dla mnie uruchamianie make jest po prostu sposobem upewnienia się, że nie mam zbyt wielu błędów kompilacji w moim kodzie, do których mam problemy z ich lokalizacją. Być może bardziej doświadczeni programiści C nie mają tego problemu, ale dla mnie ograniczenie liczby zmian między kompilacjami pomaga zmniejszyć liczbę możliwych zmian, które mogły całkowicie zniszczyć moją kompilację, a to ułatwia debugowanie.

Wreszcie pomaga mi to w zatrzymaniu. Jeśli chcę pójść na lunch, wiem, że ktoś może ponownie uruchomić aplikację w jej aktualnym stanie roboczym, bez konieczności szukania mnie, ponieważ tylko instalacja make spowoduje skopiowanie plików binarnych do rzeczywistego folderu aplikacji.

Być może istnieją inne powody, ale to jest powód, dla którego akceptuję fakt, że te dwa polecenia są rozdzielone. Jak powiedzieli inni, jeśli chcesz je połączyć, możesz połączyć je za pomocą powłoki.