Tôi sẽ sử dụng add_custom_command
để đạt được điều này cùng với cmake -E copy_if_different...
. Để có thông tin đầy đủ, hãy chạy
cmake --help-command add_custom_command
cmake -E
Vì vậy, trong trường hợp của bạn, nếu bạn có cấu trúc thư mục sau:
/CMakeLists.txt
/src
/libs/test.dll
và mục tiêu CMake của bạn mà lệnh áp dụng MyTest
, sau đó bạn có thể thêm phần sau vào CMakeLists.txt của mình:
add_custom_command(TARGET MyTest POST_BUILD # Adds a post-build event to MyTest
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..."
"${PROJECT_SOURCE_DIR}/libs/test.dll" # <--this is in-file
$<TARGET_FILE_DIR:MyTest>) # <--this is out-file path
Nếu bạn chỉ muốn toàn bộ nội dung của /libs/
thư mục được sao chép, hãy sử dụng cmake -E copy_directory
:
add_custom_command(TARGET MyTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/libs"
$<TARGET_FILE_DIR:MyTest>)
Nếu bạn cần sao chép các hình nền khác nhau tùy thuộc vào cấu hình (Ví dụ: Phát hành, Gỡ lỗi) thì bạn có thể có chúng trong các thư mục con được đặt tên với cấu hình tương ứng: /libs/Release
và /libs/Debug
. Sau đó, bạn cần đưa loại cấu hình vào đường dẫn đến dll trong add_custom_command
cuộc gọi, như sau:
add_custom_command(TARGET MyTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
$<TARGET_FILE_DIR:MyTest>)
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>
cho đích đích. Nếu không, nó sẽ sao chép nó vào đường dẫn xây dựng thư viện, điều này vô ích.