Câu trả lời:
Như đã lưu ý trong bài đăng blog này và được đề cập đến trong Điều khoản cấu hình GCC , --target
chỉ áp dụng khi bạn đang biên dịch các công cụ. Khi bạn đang thực hiện biên dịch chéo bình thường của một thư viện hoặc tệp nhị phân mà bạn sử dụng
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Tuy nhiên, khi bạn đang xây dựng các toolchains, mọi thứ có thể trở nên phức tạp hơn. Tôi nghĩ rằng điều sau là đúng (mặc dù tôi không thể nói rằng tôi đã từng biên dịch thủ công một trình gỡ lỗi chéo):
Hãy nói rằng bạn có:
Bạn sẽ định cấu hình và xây dựng máy chủ gỡ lỗi của mình (ví dụ: gdbserver) để chạy trên thiết bị nhúng của bạn với
./configure --build=powerpc --host=mips
để bạn có thể đưa vào thiết bị nhúng của mình và chạy "gdbserver: 1234 a.out" để bắt đầu gỡ lỗi và lắng nghe trên cổng 1234.
Sau đó, bạn sẽ xây dựng ứng dụng gỡ lỗi của mình (kết nối và điều khiển gdbserver) với
./configure --build=powerpc --host=i686 --target=mips
mà bạn sẽ sao chép vào máy tính xách tay x86 của mình để trong trường, bạn có thể chạy "gdbclient nhúng.device: 1234" để gỡ lỗi chương trình a.out của mình.
Tất cả điều này cũng áp dụng cho các trình biên dịch mà bạn có thể muốn xem liên kết GCC ở trên hoặc phần này về trình biên dịch chéo của Canada .
Cũng xin lưu ý rằng, trong thực tế, bạn có thể không thấy bản dựng, máy chủ lưu trữ hoặc mục tiêu được chỉ định bởi vì theo trang hướng dẫn sử dụng Autoconf này , "mục tiêu mặc định là máy chủ lưu trữ, máy chủ lưu trữ để tạo và xây dựng theo kết quả của config.guess."
Nói cách khác, hãy xây dựng mã trên --build
, chạy nó --host
với --target
môi trường kiến trúc.
Lưu ý: Đối số --target
chỉ có ý nghĩa khi xây dựng trình biên dịch (ví dụ: GCC). Khi chạy configure
trước khi xây dựng GCC:
--build
: máy bạn đang xây dựng--host
: máy bạn đang chế tạo--target
: máy mà GCC sẽ tạo mã nhị phân choTừ tài liệu GCC ( ghi chú cài đặt Máy chủ / Mục tiêu cụ thể ):
Nếu bản dựng, máy chủ và đích đều giống nhau, thì đây được gọi là bản gốc. Nếu bản dựng và máy chủ lưu trữ giống nhau nhưng mục tiêu khác nhau, điều này được gọi là chéo. Nếu bản dựng, máy chủ và mục tiêu đều khác nhau, thì đây được gọi là người canada (vì những lý do khó hiểu liên quan đến đảng chính trị của Canada và lý lịch của người làm việc trên bản dựng tại thời điểm đó). Nếu máy chủ và máy đích giống nhau, nhưng bản dựng khác nhau, bạn đang sử dụng trình biên dịch chéo để tạo bản gốc cho một hệ thống khác. Một số người gọi đây là máy chủ lưu trữ x-máy chủ lưu trữ, bản gốc kết hợp hoặc bản địa kết hợp. Nếu bản dựng và mục tiêu giống nhau, nhưng máy chủ lưu trữ khác nhau, bạn đang sử dụng trình biên dịch chéo để tạo trình biên dịch chéo tạo ra mã cho máy bạn đang xây dựng. Điều này là hiếm, vì vậy không có cách nào để mô tả nó. Có một đề xuất để gọi đây là một sự trở lại.
--target
là không liên quan đến bất kỳ dự án nào mà bản thân nó không phải là một trình biên dịch. Vậy tại sao nó là một tùy chọn cấu hình tiêu chuẩn? Gây nhầm lẫn.
configure
không hẳn là đỉnh cao của thiết kế đẹp và sạch; Tôi đoán đó chỉ là kết quả của sự thay đổi tính năng dành riêng cho ứng dụng.
--host
và--build
. Tôi có hai dự án C ++ và không thể xây dựng cho Android vì Autotools quá khó. Nó yêu cầu chạy thử nghiệm bằng chuỗi công cụ của máy chủ.