Trong CMake, tôi đang cố gắng xây dựng một dự án bao gồm các thư viện cho nhiều kiến trúc xử lý khác nhau, được biên dịch bởi các công cụ khác nhau. Đối với mỗi kiến trúc, các thư viện tĩnh được xây dựng trong nhiều thư mục con, và sau đó được thu thập vào một thư viện được chia sẻ trong thư mục gốc. Cho đến nay, tôi đã không thể tìm ra điều này.CMake add_custom_command/_target trong các thư mục khác nhau để biên dịch chéo
Gần nhất tôi đã đi cho đến nay là sử dụng add_custom_command
và add_custom_target
trong các thư mục con để tạo tệp .a và sau đó cố gắng thu thập chúng thành một .so trong thư mục gốc sử dụng add_custom_command
và add_custom_target
một lần nữa. Nhưng nếu tôi làm cho điểm phụ thuộc .so vào danh sách các đầu ra lệnh tùy chỉnh, makefile nói "Không có quy tắc để tạo ..." bởi vì các đầu ra lệnh tùy chỉnh không được xuất ra khỏi thư mục con. Vì vậy, tôi đã cố gắng tạo điểm .so phụ thuộc vào danh sách các mục tiêu tùy chỉnh trong thư mục con và nó phàn nàn rằng nó không thể tìm thấy tệp có tên đó.
Để đặt nó ở dạng mã, đây là những gì tôi có trong thư mục con:
add_custom_command(OUTPUT subout.a COMMAND ${MYAR} ...)
add_custom_target(subout_target DEPENDS subout.a)
Trong thư mục gốc, tôi đã cố gắng này:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS sub/subout.a)
add_custom_target(dll ALL DEPENDS my.so)
Và tôi nhận được "Không có quy tắc để đặt mục tiêu 'sub/subout.a', cần thiết bởi 'my.so'. Dừng lại. " Điều này có ý nghĩa vì mục tiêu add_custom_command
không được xuất ra khỏi thư mục.
Và tôi đã cố gắng này:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS subout_target)
add_custom_target(dll ALL DEPENDS my.so)
Điều này thực sự sẽ gây ra các tập tin phụ/subout.a được tạo ra, nhưng sau đó nó bị chết, nói rằng "Không có quy tắc để thực hiện mục tiêu 'subout_target' ..."
Tôi nghĩ những gì tôi thực sự muốn là có thể bắt chước hành vi add_library
cho nhiều kiến trúc khác nhau. Nhưng rõ ràng, CMake không muốn tôi làm điều đó ... :)
Bất kỳ ý tưởng nào?
Điều đó hoàn toàn cố định. Cảm ơn nhiều. Bạn đã cứu tôi rất nhiều thất vọng. – boiler96
Tôi rất vui và được chào đón! – mloskot