Jawaban:
Seperti tercantum dalam entri blog ini dan disebutkan di Persyaratan Konfigurasi GCC , --target
hanya berlaku saat Anda menyusun toolchain. Saat Anda melakukan kompilasi silang normal perpustakaan atau biner yang Anda gunakan
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Namun, ketika Anda sedang membangun toolchain, hal bisa lebih rumit. Saya pikir yang berikut ini benar (meskipun saya tidak bisa mengatakan saya pernah secara manual mengompilasi cross-debugger):
Katakanlah Anda memiliki:
Anda akan mengkonfigurasi dan membangun server debugging (mis. Gdbserver) untuk dijalankan pada perangkat tertanam Anda
./configure --build=powerpc --host=mips
sehingga Anda dapat menggunakan perangkat tertanam dan menjalankan "gdbserver: 1234 a.out" untuk memulai debugging dan mendengarkan pada port 1234.
Anda kemudian akan membangun klien debugging (yang menghubungkan dan mengontrol gdbserver) dengan
./configure --build=powerpc --host=i686 --target=mips
yang akan Anda salin ke laptop x86 Anda sehingga di lapangan Anda dapat menjalankan "gdbclient embedded.device: 1234" untuk men-debug program a.out Anda.
Ini semua berlaku untuk kompiler juga yang Anda mungkin ingin melihat tautan GCC di atas atau bagian tentang kompilasi silang Kanada ini .
Perhatikan juga bahwa, dalam praktiknya, Anda mungkin tidak melihat build, host, atau target ditentukan karena, menurut halaman manual Autoconf ini , "target defaults to host, host to build, dan build to result of config.guess."
Singkatnya, buat kode --build
, jalankan --host
dengan --target
lingkungan arsitektur.
Catatan: Argumen --target
hanya masuk akal saat membangun kompilator (mis. GCC). Saat menjalankan configure
sebelum membuat GCC:
--build
: mesin yang sedang Anda buat--host
: mesin yang Anda buat--target
: mesin tempat GCC akan menghasilkan binerDari dokumentasi GCC ( Catatan penginstalan khusus Host / Target ):
Jika build, host, dan target semuanya sama, ini disebut native. Jika build dan host sama tetapi targetnya berbeda, ini disebut salib. Jika build, host, dan target semuanya berbeda, ini disebut Kanada (karena alasan yang tidak jelas terkait dengan partai politik Kanada dan latar belakang orang yang mengerjakan build pada saat itu). Jika host dan target sama, tetapi build berbeda, Anda menggunakan cross-compiler untuk membuat native untuk sistem yang berbeda. Beberapa orang menyebutnya sebagai host-x-host, crossed native, atau cross-built native. Jika build dan target sama, tetapi hostnya berbeda, Anda menggunakan kompiler silang untuk membuat kompiler silang yang menghasilkan kode untuk mesin tempat Anda membangun. Ini jarang terjadi, jadi tidak ada cara umum untuk menggambarkannya. Ada usulan untuk menyebutnya crossback.
--target
tidak relevan dengan proyek apa pun yang bukan kompiler itu sendiri. Jadi mengapa ini adalah opsi konfigurasi standar? Membingungkan.
configure
bukanlah puncak dari desain yang bagus dan bersih; Saya kira itu hanya hasil dari fitur khusus aplikasi.
--host
dan--build
. Saya punya dua proyek C ++ dan tidak mungkin membangun untuk Android karena Autotools sangat kacau. Itu bersikeras menjalankan tes menggunakan toolchain host.