我允许每个目标在构建完成后将其所有.exe,.a,.dll等文件复制到目标文件夹:
function(BuildMirror TARGET DESTINATION)
# Check if folder exists
if (NOT EXISTS "${DESTINATION}")
message(WARNING "Destination folder did not exist, created: ${DESTINATION}")
file(MAKE_DIRECTORY "${DESTINATION}")
endif()
# Copy output
add_custom_command(
TARGET ${TARGET}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -DDESTINATION="${DESTINATION}" -P "${BUILDCHAIN_CMAKE}/PostBuildMerge.cmake"
)
endfunction(BuildMirror)
PostBuildMerge.cmake的定义如下:
# Search
file(GLOB FILES
"${CMAKE_BINARY_DIR}/*.a"
"${CMAKE_BINARY_DIR}/*.dll"
"${CMAKE_BINARY_DIR}/*.lib"
"${CMAKE_BINARY_DIR}/*.exe"
)
# Copy
file(COPY ${FILES} DESTINATION "${DESTINATION}")
对于大多数项目来说似乎工作正常,但是(我似乎无法找出原因)一个项目无法完全复制(文件被复制),并显示以下消息:
file COPY cannot set modification time on
"xxx/Lib/Vulkan/libVkLayer_parameter_validation.dll"
据我所知,CMake不需要任何特殊权限,并且文件未设置为任何只读状态。
什么可能导致此错误,如果我无法阻止它有一种方法来抑制此错误并继续构建,因为文件仍然被复制(没有正确的修改时间,但没关系)。
谢谢。
答案 0 :(得分:0)
我似乎意外地并行调用了两次BuildMirror,所以我只能假设它失败了,因为第二个BuildMirror覆盖了类似的东西。
很抱歉这个混乱。