আমি add_custom_command
পাশাপাশি এটি অর্জন করতে ব্যবহার করব cmake -E copy_if_different...
। সম্পূর্ণ তথ্য চালানোর জন্য
cmake --help-command add_custom_command
cmake -E
সুতরাং আপনার ক্ষেত্রে যদি আপনার নিম্নলিখিত ডিরেক্টরি কাঠামো থাকে:
/CMakeLists.txt
/src
/libs/test.dll
এবং কমান্ডটি প্রযোজ্য যেখানে আপনার সিএমকে লক্ষ্য MyTest
, তখন আপনি নিজের সিএমকেলিস্ট.সেক্সটটিতে নিম্নলিখিতগুলি যুক্ত করতে পারেন:
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
আপনি যদি কেবল /libs/
ডিরেক্টরিটির সম্পূর্ণ বিষয়বস্তু অনুলিপি করতে চান তবে ব্যবহার করুন 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>)
আপনার যদি কনফিগারেশনের উপর নির্ভর করে বিভিন্ন dlls অনুলিপি করতে হয় (রিলিজ, ডিবাগ, উদাহরণস্বরূপ) তবে আপনার সাথে সম্পর্কিত কনফিগারেশন সহ উপ-ডিরেক্টরিতে নাম থাকতে পারে:, /libs/Release
এবং /libs/Debug
। তারপরে আপনাকে add_custom_command
কলটিতে dll যাওয়ার পথে কনফিগারেশন টাইপটি ইনজেক্ট করতে হবে :
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>
লক্ষ্য গন্তব্যের জন্য ব্যবহার করেছি । অন্যথায় এটি এটি লাইব্রেরি নির্মাণের পথে অনুলিপি করে, যা অকেজো।