我项目的二进制目录结构目前是这样的(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,我认为使用post-build事件是可行的,因此我尝试将其添加到每个库'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}
,至少我在输出窗口中为该变量得到一个空字符串。答案 0 :(得分:0)
您可以使用generator expressions:
使其更通用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自动附加。
<强>参考强>