CMakeLists.txt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. add_library(headeronly INTERFACE)
  2. set_property(TARGET headeronly PROPERTY INTERFACE_INCLUDE_DIRECTORIES
  3. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/headeronly>"
  4. "$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include/headeronly>"
  5. )
  6. set_property(TARGET headeronly PROPERTY INTERFACE_COMPILE_DEFINITIONS "HEADERONLY_DEFINE")
  7. add_library(pch_iface INTERFACE)
  8. target_precompile_headers(pch_iface INTERFACE
  9. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/pch/pch.h>"
  10. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/pch/pch.h>"
  11. )
  12. include(GenerateExportHeader)
  13. add_library(sharedlib SHARED sharedlib.cpp)
  14. generate_export_header(sharedlib)
  15. set_property(TARGET sharedlib PROPERTY INCLUDE_DIRECTORIES
  16. "${CMAKE_CURRENT_SOURCE_DIR}/sharedlib"
  17. "${CMAKE_CURRENT_BINARY_DIR}"
  18. )
  19. set_property(TARGET sharedlib PROPERTY INTERFACE_INCLUDE_DIRECTORIES
  20. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/sharedlib;${CMAKE_CURRENT_BINARY_DIR}>"
  21. "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include/sharedlib>"
  22. )
  23. set_property(TARGET sharedlib PROPERTY INTERFACE_COMPILE_DEFINITIONS "SHAREDLIB_DEFINE")
  24. add_library(sharediface INTERFACE)
  25. target_link_libraries(sharediface INTERFACE sharedlib)
  26. add_library(use_auto_type INTERFACE)
  27. target_compile_features(use_auto_type INTERFACE cxx_auto_type)
  28. add_library(use_c_restrict INTERFACE)
  29. target_compile_features(use_c_restrict INTERFACE c_restrict)
  30. add_library(source_target INTERFACE)
  31. target_sources(source_target INTERFACE
  32. $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/source_target.cpp>
  33. $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/src/source_target_for_install.cpp>
  34. )
  35. install(FILES
  36. source_target_for_install.cpp
  37. DESTINATION src
  38. )
  39. add_library(cmakeonly INTERFACE)
  40. set_property(TARGET cmakeonly PROPERTY INTERFACE_COMPILE_DEFINITIONS [[DEF="\"\$\B"]])
  41. set_property(TARGET cmakeonly PROPERTY custom_property CustomPropertyValue)
  42. set_property(TARGET cmakeonly PROPERTY EXPORT_PROPERTIES custom_property)
  43. install(TARGETS headeronly sharediface use_auto_type use_c_restrict source_target
  44. pch_iface cmakeonly
  45. EXPORT expInterface
  46. )
  47. install(TARGETS sharedlib
  48. EXPORT expInterface
  49. RUNTIME DESTINATION bin
  50. LIBRARY DESTINATION lib NAMELINK_SKIP
  51. ARCHIVE DESTINATION lib
  52. FRAMEWORK DESTINATION Frameworks
  53. BUNDLE DESTINATION Applications
  54. )
  55. install(FILES
  56. headeronly/headeronly.h
  57. DESTINATION include/headeronly
  58. )
  59. install(FILES
  60. pch/pch.h
  61. DESTINATION include/pch
  62. )
  63. install(FILES
  64. sharedlib/sharedlib.h
  65. "${CMAKE_CURRENT_BINARY_DIR}/sharedlib_export.h"
  66. DESTINATION include/sharedlib
  67. )
  68. install(EXPORT expInterface NAMESPACE exp:: DESTINATION lib/exp)
  69. export(EXPORT expInterface
  70. NAMESPACE bld::
  71. FILE ../ExportInterfaceBuildTree.cmake
  72. )