Tôi có một thư viện động mà được một tên khác nhau tùy thuộc vào cấu hình, quy định trong kịch bản CMake bởi:Sao chép mục tiêu tập tin đến một vị trí trong một bài đăng build bước trong CMake
set_target_properties(${name} PROPERTIES OUTPUT_NAME ${outputName}64)
set_target_properties(${name} PROPERTIES DEBUG_OUTPUT_NAME ${outputName}64_d)
Kết quả cuối cùng là tôi lấy tên khác trên bản phát hành và bản dựng gỡ lỗi. Tôi muốn sao chép thư viện kết quả vào một thư mục khác với tư cách là một bước sau khi xây dựng, nhưng món quà (?) Của CMake-Fu đã không mỉm cười khi bạn thực sự.
Tôi đã cố gắng làm điều này:
GET_TARGET_PROPERTY(origfile mylibrary LOCATION)
STRING(REGEX REPLACE "/" "\\\\" origfile ${origfile})
set(targetfile my_target_path\\${CMAKE_CFG_INTDIR}\\)
STRING(REGEX REPLACE "/" "\\\\" targetfile ${targetfile})
add_custom_command(TARGET mylibrary POST_BUILD
COMMAND copy ${origfile} ${targetfile}
)
này hoạt động tốt cho phát hành xây dựng, nhưng đối với gỡ lỗi nguồn không bao gồm _D mà tôi lại có thể ngờ. Làm cách nào để có được đường dẫn đầu ra cho mục tiêu sao cho tôi có thể sao chép tệp?
Lưu ý: Như có thể thấy từ đoạn mã trên, đây là phiên bản dành cho Windows/Visual Studio, nhưng tôi cũng muốn làm việc này trên OS X/Xcode/make.
Lưu ý: Tôi cần thư viện được đặt trong thư mục phụ làm thư mục đầu ra cho một số dự án khác phụ thuộc vào thư viện này, để các dự án này có thể tải thư viện lúc chạy. Một giải pháp thay thế có thể chấp nhận được là có thể tạo một mục tiêu tùy chỉnh thực hiện sao chép, sao cho các dự án khác có thể phụ thuộc vào dự án này, do đó phụ thuộc vào thư viện.
Nếu bạn đang nhắm mục tiêu Xcode hoặc Visual Studio, bạn có thể muốn sử dụng RUNTIME_OUTPUT_DIRECTORY thay vào đó và để IDE chăm sóc thêm cấu hình đúng. (như bạn sẽ khám phá ra nếu bạn chạy cmd trợ giúp @Fraser được thêm vào) –