Yanıtlar:
Belirtildiği gibi bu blog yayınında ve ima GCC yapılandır Şartlar , --target
sen toolchain derleme zaman geçerlidir. Bir kitaplık veya ikili dosyanın normal çapraz derlemesini yaparken
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Eğer Ancak edilir toolchain bina, işler daha karmaşık bir hale gelebilir. Aşağıdakilerin doğru olduğunu düşünüyorum (ancak bir çapraz hata ayıklayıcıyı manuel olarak derlediğimi söyleyemem):
Şunlara sahip olduğunuzu söyleyelim:
Hata ayıklama sunucunuzu (örn. Gdbserver), gömülü cihazınızda çalıştırmak için yapılandırır ve inşa edersiniz:
./configure --build=powerpc --host=mips
böylece gömülü aygıtınıza yapıştırabilir ve hata ayıklamayı başlatmak ve 1234 numaralı bağlantı noktasını dinlemek için "gdbserver: 1234 a.out" komutunu çalıştırabilirsiniz.
Daha sonra hata ayıklama istemcinizi (gdbserver'a bağlanır ve onu kontrol eder) ile oluşturursunuz.
./configure --build=powerpc --host=i686 --target=mips
x86 dizüstü bilgisayarınıza kopyalayacağınız, böylece alanda a.out programınızda hata ayıklamak için "gdbclient embedded.device: 1234" çalıştırabilirsiniz.
Bunların tümü, yukarıdaki GCC bağlantısına veya Kanada çapraz derlemesi hakkındaki bu bölüme bakmak isteyebileceğiniz derleyiciler için de geçerlidir .
Ayrıca, pratikte, bu Autoconf kılavuz sayfasına göre "ana bilgisayar için hedef varsayılanlar, yapılandırılacak ana bilgisayar ve config.guess sonucuna göre inşa edileceği için" derleme, barındırma veya hedefin belirtildiğini göremeyebilirsiniz .
Kısacası, kod oluşturmak --build
, bunu çalıştırmak --host
ile --target
mimarlık ortamına.
Not: Bağımsız değişken --target
, yalnızca derleyici oluştururken anlamlıdır (örn. GCC). configure
GCC oluşturmadan önce çalışırken :
--build
: üzerine inşa ettiğiniz makine--host
: için inşa ettiğiniz makine--target
: GCC'nin ikili kod üreteceği makineGönderen GCC belgelerinde ( Host / Hedef özel kurulum notları ):
Derleme, ana bilgisayar ve hedef hepsi aynıysa, buna yerel denir. Yapı ve ana bilgisayar aynıysa ancak hedef farklıysa buna çapraz denir. Yapı, ev sahibi ve hedef farklıysa, buna kanadalı denir (Kanada'nın siyasi partisiyle ilgili belirsiz nedenlerden ve o sırada yapı üzerinde çalışan kişinin geçmişinden dolayı). Ana bilgisayar ve hedef aynıysa ancak yapı farklıysa, farklı bir sistem için yerel oluşturmak üzere çapraz derleyici kullanıyorsunuzdur. Bazı insanlar buna host-x-host, cross native veya cross-built native diyor. Derleme ve hedef aynıysa, ancak ana bilgisayar farklıysa, üzerinde oluşturduğunuz makine için kod üreten bir çapraz derleyici oluşturmak için bir çapraz derleyici kullanıyorsunuzdur. Bu nadirdir, bu yüzden onu tanımlamanın ortak bir yolu yoktur. Bunu crossback olarak adlandırmak için bir öneri var.
--target
bu, kendisi bir derleyici olmayan herhangi bir proje ile ilgili olmadığı anlamına gelir . Öyleyse neden standart bir yapılandırma seçeneği? Kafa karıştırıcı.
configure
tam olarak iyi ve temiz bir tasarımın zirvesi değil; Sanırım bu sadece uygulamaya özgü özellik sürünmesinin bir sonucudur.
--host
ve hatta ve bile olsa yanlış araç zincirini kullanır--build
. İki C ++ projem var ve Android için inşa etmek imkansız çünkü Autotools çok berbat. Ana bilgisayarın araç zincirini kullanarak testler yürütmekte ısrar ediyor.