[英]CMake post-build-event: copy compiled libraries
我項目的二進制目錄結構目前是這樣的(Windows):
bin/mainProject/{Debug,Release}
bin/library1/{Debug,Release}
bin/library2/{Debug,Release}
...
bin/libraryN/{Debug,Release}
我想給庫復制library1lib.dll
,... libraryNlib.dll
至bin/mainProject/{Debug,Release}
目錄,一旦他們積累。
對於CMake,我認為使用后期構建事件是可行的,因此我嘗試將其添加到每個庫的CMakeLists.txt
:
add_custom_command(TARGET library1 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/library1lib.dll
${CMAKE_BINARY_DIR}/mainProject/${CMAKE_BUILD_TYPE}/
)
目前,有兩個問題:
${CMAKE_BUILD_TYPE}
,至少我在輸出窗口中得到該變量的空字符串。 您可以使用生成器表達式使其更通用:
add_custom_command(
TARGET library1
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:library1>
$<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1>
)
替代
您可以 - 如果每個依賴項都在您的CMake項目中構建 - 也只需為所有可執行文件和DLL提供一個公共輸出路徑,例如:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Out")
注意:此處需要絕對路徑,因為否則它將相對於每個目標的默認輸出路徑。 請注意,配置的子目錄由CMake自動附加。
參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.