Odpowiedzi:
Jak wspomniano w tym poście na blogu i wspomniano w Warunkach konfiguracji GCC , --target
mają zastosowanie tylko wtedy, gdy kompilujesz łańcuchy narzędzi. Kiedy robisz normalną kompilację krzyżową biblioteki lub pliku binarnego, którego używasz
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Jednak, kiedy są toolchain budowę, co może się bardziej skomplikowane. Myślę, że poniższe informacje są poprawne (chociaż nie mogę powiedzieć, że kiedykolwiek ręcznie skompilowałem cross-debugger):
Powiedzmy, że masz:
Skonfigurowałbyś i zbudował swój serwer debugowania (np. Gdbserver), aby działał na twoim urządzeniu wbudowanym z
./configure --build=powerpc --host=mips
abyś mógł podłączyć się do swojego urządzenia wbudowanego i uruchomić "gdbserver: 1234 a.out", aby rozpocząć debugowanie i nasłuchiwać na porcie 1234.
Następnie zbudowałbyś swojego klienta debugującego (który łączy się z gdbserver i kontroluje go) z
./configure --build=powerpc --host=i686 --target=mips
który można skopiować na laptopa x86, aby w polu uruchomić "gdbclient embedded.device: 1234" w celu debugowania programu a.out.
To wszystko dotyczy również kompilatorów, dla których możesz zajrzeć do powyższego łącza GCC lub tej sekcji o kanadyjskiej kompilacji krzyżowej .
Zauważ również, że w praktyce możesz nie widzieć kompilacji, hosta lub celu, ponieważ zgodnie z tą stroną podręcznika Autoconf , „cel domyślnie jest hostem, hostem do zbudowania i budowaniem na podstawie config.guess”.
Jednym słowem, zbudować kod na --build
uruchom go --host
z --target
architekturą otoczenia.
Uwaga: Argument --target
ma sens tylko podczas budowania kompilatora (np. GCC). Podczas uruchamiania configure
przed zbudowaniem GCC:
--build
: maszyna, na której budujesz--host
: maszyna, dla której budujesz--target
: maszyna, dla której GCC utworzy plik binarnyZ dokumentacji GCC ( uwagi dotyczące instalacji specyficzne dla hosta / celu ):
Jeśli kompilacja, host i cel są takie same, nazywa się to rodzimym. Jeśli kompilacja i host są takie same, ale cel jest inny, nazywa się to krzyżem. Jeśli budowa, host i cel są różne, nazywa się to kanadyjczykiem (z niejasnych powodów dotyczących kanadyjskiej partii politycznej i osoby pracującej w tym czasie nad kompilacją). Jeśli host i cel są takie same, ale kompilacja jest inna, używasz kompilatora krzyżowego do tworzenia natywnego dla innego systemu. Niektórzy nazywają to host-x-host, cross-native lub cross-build native. Jeśli kompilacja i cel są takie same, ale host jest inny, używasz kompilatora krzyżowego do kompilowania kompilatora krzyżowego, który tworzy kod dla maszyny, na której budujesz. Jest to rzadkie, więc nie ma powszechnego sposobu, aby to opisać. Istnieje propozycja, aby nazwać to zwrotem.
--target
nie dotyczy żadnego projektu, który sam nie jest kompilatorem. Dlaczego więc jest to standardowa opcja konfiguracji? Mylące.
configure
nie jest szczytem dobrego i czystego projektu; Wydaje mi się, że to tylko wynik pełzania funkcji specyficznych dla aplikacji.
--host
i--build
. Mam dwa projekty C ++ i nie mogę zbudować dla Androida, ponieważ Autotools jest tak popieprzony. Nalega na uruchamianie testów przy użyciu łańcucha narzędzi hosta.