Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

129 строки
6.6 KiB

  1. # Initialize ######################################################################################
  2. Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE )
  3. Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
  4. Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )
  5. Option ( CPPLOGGING_INSTALL_HEADER
  6. "Install headers of cpplogging."
  7. ON )
  8. Option ( CPPLOGGING_INSTALL_STATIC
  9. "Install static library of cpplogging."
  10. ON )
  11. Option ( CPPLOGGING_INSTALL_SHARED
  12. "Install shared library of cpplogging."
  13. ON )
  14. Option ( CPPLOGGING_INSTALL_DEBUG
  15. "Install the stripped debug informations of cpplogging."
  16. OFF )
  17. Option ( CPPLOGGING_NO_STRIP
  18. "Do not strip debug symbols from binary."
  19. OFF )
  20. Find_Package ( nlohmann_json QUIET )
  21. If ( nlohmann_json_FOUND )
  22. Set ( CPPLOGGING_HAS_NLOHMANN_JSON true )
  23. EndIf ( )
  24. # Object Library ##################################################################################
  25. Set ( CMAKE_POSITION_INDEPENDENT_CODE ON )
  26. Set ( CPPLOGGING_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include )
  27. Set ( CPPLOGGING_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include )
  28. Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in
  29. ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging/config.h )
  30. File ( GLOB_RECURSE CPPLOGGING_HEADER_FILES ${CPPLOGGING_INCLUDE_DIR}/*.h )
  31. File ( GLOB_RECURSE CPPLOGGING_INLINE_FILES ${CPPLOGGING_INCLUDE_DIR}/*.inl )
  32. File ( GLOB_RECURSE CPPLOGGING_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp )
  33. Add_Library ( cpplogging-objects
  34. OBJECT
  35. ${CPPLOGGING_HEADER_FILES}
  36. ${CPPLOGGING_INLINE_FILES}
  37. ${CPPLOGGING_SOURCE_FILES} )
  38. If ( CPPLOGGING_HAS_NLOHMANN_JSON )
  39. Target_Link_Libraries ( cpplogging-objects
  40. PRIVATE
  41. nlohmann_json::nlohmann_json )
  42. EndIf ( )
  43. Target_Include_Directories ( cpplogging-objects
  44. PUBLIC
  45. $<BUILD_INTERFACE:${CPPLOGGING_INCLUDE_DIR}>
  46. $<BUILD_INTERFACE:${CPPLOGGING_GENERATED_INCLUDE_DIR}>
  47. $<INSTALL_INTERFACE:${CPPLOGGING_INSTALL_DIR_INCLUDE}> )
  48. # Static Library ##################################################################################
  49. Add_Library ( cpplogging-static STATIC $<TARGET_OBJECTS:cpplogging-objects> )
  50. Set_Target_Properties ( cpplogging-static
  51. PROPERTIES
  52. OUTPUT_NAME "cpplogging"
  53. VERSION ${CPPLOGGING_VERSION} )
  54. Target_Include_Directories ( cpplogging-static
  55. PUBLIC
  56. $<BUILD_INTERFACE:${CPPLOGGING_INCLUDE_DIR}>
  57. $<BUILD_INTERFACE:${CPPLOGGING_GENERATED_INCLUDE_DIR}>
  58. $<INSTALL_INTERFACE:${CPPLOGGING_INSTALL_DIR_INCLUDE}> )
  59. # Shared Library ##################################################################################
  60. Add_Library ( cpplogging-shared SHARED $<TARGET_OBJECTS:cpplogging-objects> )
  61. Set_Target_Properties ( cpplogging-shared
  62. PROPERTIES
  63. OUTPUT_NAME "cpplogging"
  64. VERSION ${CPPLOGGING_VERSION}
  65. SOVERSION ${CPPLOGGING_VERSION_SHORT} )
  66. Target_Include_Directories ( cpplogging-shared
  67. PUBLIC
  68. $<BUILD_INTERFACE:${CPPLOGGING_INCLUDE_DIR}>
  69. $<BUILD_INTERFACE:${CPPLOGGING_GENERATED_INCLUDE_DIR}>
  70. $<INSTALL_INTERFACE:${CPPLOGGING_INSTALL_DIR_INCLUDE}> )
  71. # Optimization ####################################################################################
  72. # pedantic
  73. If ( HAS_PEDANTIC )
  74. Pedantic_Apply_Flags_Target ( cpplogging-objects CXX )
  75. Pedantic_Apply_Flags_Target ( cpplogging-static CXX )
  76. Pedantic_Apply_Flags_Target ( cpplogging-shared CXX )
  77. EndIf ( )
  78. # cotire
  79. If ( HAS_COTIRE )
  80. Cotire ( cpplogging-objects )
  81. Cotire ( cpplogging-static )
  82. Cotire ( cpplogging-shared )
  83. EndIf ( )
  84. # Install #########################################################################################
  85. # Header
  86. If ( CPPLOGGING_INSTALL_HEADER )
  87. Install ( DIRECTORY ${CPPLOGGING_INCLUDE_DIR}/cpplogging
  88. DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} )
  89. Install ( DIRECTORY ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging
  90. DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} )
  91. EndIf ( )
  92. # Static
  93. If ( CPPLOGGING_INSTALL_STATIC )
  94. Install ( TARGETS cpplogging-static
  95. EXPORT cpplogging
  96. DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} )
  97. EndIf ( )
  98. # Shared
  99. If ( CPPLOGGING_INSTALL_SHARED )
  100. Install ( TARGETS cpplogging-shared
  101. EXPORT cpplogging
  102. DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} )
  103. EndIf ( )
  104. # Debug
  105. If ( HAS_STRIP_SYMBOLS AND NOT CPPLOGGING_NO_STRIP )
  106. Strip_Symbols ( cpplogging-shared CPPLOGGING_DBG_FILE )
  107. If ( CPPLOGGING_INSTALL_DEBUG )
  108. Install ( FILES ${CPPLOGGING_DBG_FILE}
  109. DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} )
  110. EndIf ( )
  111. EndIf ( )