set(headeronly_headers headeronly/headeronly.h) add_library(headeronly INTERFACE ${headeronly_headers}) set_property(TARGET headeronly PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$" "$" ) set_property(TARGET headeronly PROPERTY INTERFACE_COMPILE_DEFINITIONS "HEADERONLY_DEFINE") add_custom_command(OUTPUT headergen/headergen.h COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/headergen.h.in ${CMAKE_CURRENT_BINARY_DIR}/headergen/headergen.h DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/headergen.h.in VERBATIM) add_library(headergen INTERFACE headergen/headergen.h) set_property(TARGET headergen PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$" ) set_property(TARGET headergen PROPERTY PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/headergen/headergen.h) add_library(pch_iface INTERFACE) target_precompile_headers(pch_iface INTERFACE "$" "$/include/pch/pch.h>" ) include(GenerateExportHeader) add_library(sharedlib SHARED sharedlib.cpp) generate_export_header(sharedlib) set_property(TARGET sharedlib PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/sharedlib" "${CMAKE_CURRENT_BINARY_DIR}" ) set_property(TARGET sharedlib PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$" "$/include/sharedlib>" ) set_property(TARGET sharedlib PROPERTY INTERFACE_COMPILE_DEFINITIONS "SHAREDLIB_DEFINE") add_library(sharediface INTERFACE) target_link_libraries(sharediface INTERFACE sharedlib) add_library(use_auto_type INTERFACE) target_compile_features(use_auto_type INTERFACE cxx_auto_type) add_library(use_c_restrict INTERFACE) target_compile_features(use_c_restrict INTERFACE c_restrict) add_library(source_target INTERFACE) target_sources(source_target INTERFACE $ $/src/source_target_for_install.cpp> ) install(FILES source_target_for_install.cpp DESTINATION src ) add_library(cmakeonly INTERFACE) set_property(TARGET cmakeonly PROPERTY INTERFACE_COMPILE_DEFINITIONS [[DEF="\"\$\B"]]) set_property(TARGET cmakeonly PROPERTY custom_property CustomPropertyValue) set_property(TARGET cmakeonly PROPERTY EXPORT_PROPERTIES custom_property) install(TARGETS headeronly sharediface use_auto_type use_c_restrict source_target pch_iface cmakeonly EXPORT expInterface ) install(TARGETS headergen EXPORT expInterface PUBLIC_HEADER DESTINATION include/headergen INCLUDES DESTINATION include/headergen ) install(TARGETS sharedlib EXPORT expInterface RUNTIME DESTINATION bin LIBRARY DESTINATION lib NAMELINK_SKIP ARCHIVE DESTINATION lib FRAMEWORK DESTINATION Frameworks BUNDLE DESTINATION Applications ) install(FILES ${headeronly_headers} DESTINATION include/headeronly ) install(FILES pch/pch.h DESTINATION include/pch ) install(FILES sharedlib/sharedlib.h "${CMAKE_CURRENT_BINARY_DIR}/sharedlib_export.h" DESTINATION include/sharedlib ) install(EXPORT expInterface NAMESPACE exp:: DESTINATION lib/exp) export(EXPORT expInterface NAMESPACE bld:: FILE ../ExportInterfaceBuildTree.cmake )