function(get_link_libraries OUTPUT_LIST TARGET)
    get_target_property(IMPORTED ${TARGET} IMPORTED)
    list(APPEND VISITED_TARGETS ${TARGET})
    if (IMPORTED)
        get_target_property(LIBS ${TARGET} INTERFACE_LINK_LIBRARIES)
    else()
        get_target_property(LIBS ${TARGET} LINK_LIBRARIES)
    endif()
    set(LIB_FILES "")
    foreach(LIB ${LIBS})
        if (TARGET ${LIB})
            get_target_property(LIB_IMPORTED ${LIB} IMPORTED)
            list(FIND VISITED_TARGETS ${LIB} VISITED)
            if (${VISITED} EQUAL -1)
                if (LIB_IMPORTED)
                    get_target_property(LIB_FILE ${LIB} LOCATION)
                    if (NOT LIB_FILE)
                        get_target_property(LIB_FILE ${LIB} IMPORTED_LOCATION)
                    endif()
                    if (NOT LIB_FILE)
                        get_target_property(LIB_FILE ${LIB} IMPORTED_IMPLIB)
                    endif()
                    if (NOT LIB_FILE)
                        get_target_property(LIB_FILE ${LIB} INTERFACE_LINK_LIBRARIES)
                    endif()
                    get_link_libraries(LINK_LIB_FILES ${LIB})
                    list(APPEND LIB_FILES ${LIB_FILE} ${LINK_LIB_FILES})
                else()
                    list(APPEND LIB_FILES ${LIB})
                endif()
            endif()
        endif()
    endforeach()
    set(VISITED_TARGETS ${VISITED_TARGETS} PARENT_SCOPE)
    set(${OUTPUT_LIST} ${LIB_FILES} PARENT_SCOPE)
endfunction()
