Azure-Kinect-Sensor-SDK/cmake/CopyImportedBinary.cmake

49 строки
1.9 KiB
CMake

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
# Copies the imported binary DLL to the RUNTIME output location
#
# This enables executables to be run from the output location without including the dependent DLLs in the PATH
#
# Example:
# add_library(External::Foo SHARED IMPORTED GLOBAL)
#
# set_target_properties(External::Foo PROPERTIES
# INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include"
# IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/Foo.lib"
# IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/Foo.dll"
# )
# include(CopyImportedBinary)
# copy_imported_binary(TARGET External::Foo)
#
#
function(copy_imported_binary)
# Parse arguments to
# COPY_IMPORTED_BINARY_TARGET : The imported target to copy the dll from
cmake_parse_arguments(COPY_IMPORTED_BINARY "" "TARGET" "" ${ARGN})
message(STATUS "Copying DLLs for ${COPY_IMPORTED_BINARY_TARGET}")
get_property(Target_Dll_Path TARGET "${COPY_IMPORTED_BINARY_TARGET}" PROPERTY IMPORTED_LOCATION)
# Copy the DLL to all output directories for available configs (for multi-configuration generators)
if ("${CMAKE_CONFIGURATION_TYPES}" STREQUAL "")
set(DLL_COPY_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
file(MAKE_DIRECTORY "${DLL_COPY_DIRECTORY}")
file(COPY "${Target_Dll_Path}" DESTINATION "${DLL_COPY_DIRECTORY}")
message(STATUS "Copied dll from ${Target_Dll_Path} to ${DLL_COPY_DIRECTORY}")
else()
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
set(DLL_COPY_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CONFIG}")
file(MAKE_DIRECTORY "${DLL_COPY_DIRECTORY}")
file(COPY "${Target_Dll_Path}" DESTINATION "${DLL_COPY_DIRECTORY}")
message(STATUS "Copied dll from ${Target_Dll_Path} to ${DLL_COPY_DIRECTORY}")
endforeach(CONFIG)
endif()
endfunction()