CMakeLists.txt 3.4 KB

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