#### From carl. function(_export_target_add_lib output TARGET TYPE) set(${output} "${${output}} add_library(${TARGET} ${TYPE} IMPORTED)" PARENT_SCOPE) endfunction(_export_target_add_lib) function(_export_target_start output TARGET) set(${output} "${${output}} if(NOT TARGET ${TARGET})" PARENT_SCOPE) endfunction(_export_target_start) function(_export_target_end output) set(${output} "${${output}} endif()" PARENT_SCOPE) endfunction(_export_target_end) macro(_export_target_set_prop output TARGET REQUIRED PROPERTY) get_target_property(VALUE ${TARGET} ${PROPERTY}) set(extra_args ${ARGN}) list(GET extra_args 0 NEWPROPERTY) if(NOT NEWPROPERTY) set(NEWPROPERTY ${PROPERTY}) endif() if(VALUE) set(${output} "${${output}} set_target_properties(${TARGET} PROPERTIES ${NEWPROPERTY} \"${VALUE}\")") elseif(${REQUIRED}) message(STATUS "Did not find ${PROPERTY} of ${TARGET} for export.") endif() endmacro(_export_target_set_prop) macro(export_target output TARGET) get_target_property(TYPE ${TARGET} TYPE) _export_target_start(${output} ${TARGET}) if(TYPE STREQUAL "SHARED_LIBRARY") _export_target_add_lib(${output} ${TARGET} SHARED) _export_target_set_prop(${output} ${TARGET} TRUE IMPORTED_LOCATION) _export_target_set_prop(${output} ${TARGET} FALSE INTERFACE_INCLUDE_DIRECTORIES) _export_target_set_prop(${output} ${TARGET} FALSE LINK_INTERFACE_LIBRARIES) elseif(TYPE STREQUAL "STATIC_LIBRARY") _export_target_add_lib(${output} ${TARGET} STATIC) _export_target_set_prop(${output} ${TARGET} TRUE IMPORTED_LOCATION) _export_target_set_prop(${output} ${TARGET} FALSE INTERFACE_INCLUDE_DIRECTORIES) _export_target_set_prop(${output} ${TARGET} FALSE LINK_INTERFACE_LIBRARIES IMPORTED_LINK_INTERFACE_LIBRARIES) elseif(TYPE STREQUAL "INTERFACE_LIBRARY") _export_target_add_lib(${output} ${TARGET} INTERFACE) _export_target_set_prop(${output} ${TARGET} TRUE INTERFACE_INCLUDE_DIRECTORIES) _export_target_set_prop(${output} ${TARGET} FALSE INTERFACE_LINK_LIBRARIES) else() message(STATUS "Unknown type ${TYPE}") endif() if(NOT "${ARGN}" STREQUAL "") set(deps ${ARGN}) foreach(d ${deps}) set(${output} "${${output}} set_target_properties(${TARGET} PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES \"${d}\")") endforeach() endif() _export_target_end(${output}) endmacro(export_target)