2010-03-27 8 views

Odpowiedz

60

Zazwyczaj skrypt configure gdy prowadzony będzie:

  • Sprawdź kilka szczegółów na temat urządzenia na którym oprogramowanie będzie zainstalowany. Ten skrypt sprawdza, czy w systemie jest wiele zależności. W celu poprawnego działania określonego oprogramowania może być wymagane wiele rzeczy z rzeczy, które już istnieją na komputerze . Jeśli któregoś z głównych wymagań brakuje w twoim systemie, skrypt konfiguracyjny będzie exit i nie będziesz mógł kontynuować instalacji, dopóki nie uzyskasz wymaganych rzeczy.

  • Utwórz Makefile do użycia w następnym kroku.

+3

Nigdy nie wiem makefile został stworzony przez configure before :) – Mask

+2

Zapewnia również interfejs do konfiguracji (trafnie) opcji kompilacji. './configure --help' zwykle (zazwyczaj?) podaje listę dostępnych opcji. – intuited

+0

głosuj na makefile szczegóły – jayatubi

5

Skrypt configure tworzy Makefile od szablonu, zastępując w rzeczach jak gdzie chcesz zainstalować kod i co definicje są potrzebne dla (C, C++, Fortran, ...) kompilator, który jest używany zbudować program. Teoretycznie można to zrobić w jednym kroku, z tym wyjątkiem, że istnieje wiele różnych konfiguracji, które są łatwiejsze do wykonania etapami. (Na przykład, jeśli budujesz duży program z maszyną wielordzeniową, możesz chcieć określić, że zachodzi pewna liczba równoległych kompilacji, co nie jest problemem w sposobie konfigurowania.)

32

To działa skrypt, który zwykle tworzy pliki makefile i "configure.h".

Skrypt jest napisany w języku "m4", który jest językiem makro. Makra najwyższego poziomu znajdują się w autoconf.ac lub (w starszych systemach) autoconf.in. Te rozszerzenia zawierają makra na niższym poziomie, które z kolei rozwijają się w rzeczywiste testy, które tworzą małe programy lub zadania, aby sprawdzić, jaki rodzaj systemu posiadasz.

Na przykład AC_CHECK_HEADER ([myheader.h], ...) może wygenerować mały program C jak:

#include "myheader.h" 
int main(int argc, char** argv) { 
    return 0; 
} 

Jeśli program kompiluje, kontrola jest uważany za "przejście" w przeciwnym wypadku "nie" . Status takich kontroli często znajduje odzwierciedlenie w pliku config.h. Na czeku mijania, można znaleźć linię w config.h, który wygląda następująco:

#define HAVE_MYHEADER_H 1 

czasu na teście to zawiedzie, to może wyglądać

#define HAVE_MYHEADER_H 0 

Kiedy skonfigurowany do pracy z autoconf w Makro AM_INIT_AUTOMAKE, Makefile może również odwoływać się do wyników testów, jeśli zmienna zawierająca wynik testu zostanie wyeksportowana. Więc jeśli potrzebna biblioteka znajduje się kilka różnych typowych lokalizacji lub składnia "co działa" z jednym ze standardowych narzędzi (takich jak tar, ar, itp.) Jest inna, lub preferowane narzędzie nie jest dostępne, plik Makefile będzie potrafi poprawnie zbudować projekt przy użyciu różnych lokalizacji biblioteki, różnych składni narzędzi lub innego zestawu narzędzi.

Tak więc w przypadku projektu Autotools (configure/make/make install) Makefile naprawdę nie zawiera wszystkiego, co niezbędne do zbudowania projektu, jest generowany z szablonu Makefile.in, aby dopasować go dokładnie do systemu po wpisaniu " configure ".

+0

Zauważyłem, że te pliki 'configure' są bardzo duże, czy są napisane ręcznie? – Mask

+10

Nie, skrypt configure jest rozwinięciem (również przy użyciu języka m4) dyrektyw, które są umieszczane w pliku configure.ac (lub w starszych systemach configure.in). Uruchomienie autoconf wygeneruje skrypt configure z configure.ac, ale czasami musisz załatać biblioteki makr. Kiedy musisz to zrobić, uruchom aclocal i spróbuje on sprawdzić, czy wszystkie makra są poprawnie zdefiniowane (i mogą być użyte do następnego wykonania autokonf). –

+0

@Edwin Buck: doskonała odpowiedź! – Lazer