Khi sử dụng CMake để biên dịch chéo, người ta thường chỉ định một tệp chuỗi công cụ thông qua tùy chọn CMAKE_TOOLCHAIN_FILE
. Trong GNU terminology, người ta có thể chỉ định bộ công cụ kiến trúc máy chủ lưu trữ bằng cách sử dụng tệp này. Tuy nhiên, người ta thường có thể không mong đợi để có thể thực hiện bất cứ điều gì được xây dựng với toolchain này. Vì vậy, thường xuyên, một số công cụ xây dựng cần phải được biên dịch cho kiến trúc xây dựng.Làm thế nào để hướng dẫn CMake sử dụng trình biên dịch kiến trúc xây dựng?
Hãy xem xét thiết lập sau. Tôi có hai tệp nguồn genfoo.c
và bar.c
. Trong khi xây dựng, genfoo.c
cần được biên dịch và chạy. Đầu ra của nó cần phải được ghi vào foo.h
. Sau đó, tôi có thể biên dịch bar.c
, trong đó #include "foo.h"
. Vì CMake mặc định sử dụng chuỗi công cụ kiến trúc máy chủ, các hướng dẫn cho bar.c
rất dễ dàng. Nhưng làm thế nào để tôi nói nó sử dụng chuỗi công cụ kiến trúc xây dựng để biên dịch genfoo.c
? Chỉ cần nói add_executable(genfoo genfoo.c)
sẽ dẫn đến việc sử dụng trình biên dịch sai.
Như bạn có đã nêu, trong thuật ngữ GNU bạn sẽ sử dụng lệnh 'configure' để chỉ định kiến trúc máy chủ. Và bạn sẽ phải chạy 'configure' hai lần nếu bạn muốn xây dựng cho hai môi trường máy chủ khác nhau. Vì vậy, tôi thấy hai khả năng với CMake: sử dụng một kịch bản xây dựng để tạo và thực thi hai môi trường cần thiết (xem [ở đây] (http://stackoverflow.com/questions/30999130/cmake-build-multiple-targets-in-different- build-directories)) hoặc sử dụng [ExternalProject_Add()] (https://cmake.org/cmake/help/v3.2/module/ExternalProject.html) và chia 'CMakeLists.txt' của bạn thành các tiểu dự án chuyên dụng. – Florian
Không, với autotools bạn chỉ cần sử dụng 'CC_FOR_BUILD'. Xem 'ax_cc_for_build'. – Helmut
Ok, không biết điều đó. Nếu tôi hiểu chính xác, chúng ta đang nói về ca sử dụng được mô tả trong [Biên dịch ghép CMake - Sử dụng các tệp thi hành trong bản dựng được tạo trong khi xây dựng] (https://cmake.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build)? – Florian