CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. cmake_minimum_required(VERSION 3.5)
  2. project("fastweb")
  3. # 设置全局属性
  4. set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  5. # 设置自定义配置类型
  6. if(MSVC)
  7. set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Build config types" FORCE)
  8. endif()
  9. # C++等级
  10. set(CMAKE_CXX_STANDARD 17)
  11. set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
  12. set(FASTWEBCORE ${PROJECT_NAME}core)
  13. # 安装复制
  14. set(CMAKE_INSTALL_ALWAYS_COPY TRUE)
  15. # 设置根目录
  16. set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  17. # 添加三方模块
  18. if(MSVC)
  19. add_subdirectory(${CMAKE_SOURCE_DIR}/3rdparty/lua)
  20. endif()
  21. # Recursively get all source files
  22. file(GLOB_RECURSE SOURCE_FILES
  23. "${PROJECT_SOURCE_DIR}/src/*.cpp"
  24. )
  25. file(GLOB_RECURSE HEADER_FILES
  26. "${PROJECT_SOURCE_DIR}/src/*.h"
  27. )
  28. foreach(source IN LISTS SOURCE_FILES)
  29. get_filename_component(source_path "${source}" PATH)
  30. file(RELATIVE_PATH source_path_rel "${PROJECT_SOURCE_DIR}" "${source_path}")
  31. string(REPLACE "/" "\\" source_path_rel_win "${source_path_rel}")
  32. source_group(${source_path_rel_win} FILES "${source}")
  33. endforeach()
  34. foreach(header IN LISTS HEADER_FILES)
  35. get_filename_component(header_path "${header}" PATH)
  36. file(RELATIVE_PATH header_path_rel "${PROJECT_SOURCE_DIR}" "${header_path}")
  37. string(REPLACE "/" "\\" header_path_rel_win "${header_path_rel}")
  38. source_group(${header_path_rel_win} FILES "${header}")
  39. endforeach()
  40. set(YLIB ${CMAKE_INSTALL_PREFIX}/../ylib)
  41. include_directories(${PROJECT_SOURCE_DIR}/src)
  42. if(MSVC)
  43. include_directories(${PROJECT_SOURCE_DIR}/src)
  44. include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
  45. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/lua/include)
  46. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/soci/include)
  47. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Windows/Include)
  48. include_directories(${YLIB}/include)
  49. include_directories(D:/lib/ylib/3rdparty)
  50. add_compile_options(/W3 /wd4819)
  51. else()
  52. include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
  53. include_directories(/usr/local/include)
  54. include_directories(/opt/lua54/include)
  55. add_definitions(-DfPIC)
  56. endif()
  57. # 根据构建类型添加定义
  58. add_library(${FASTWEBCORE} SHARED ${SOURCE_FILES} ${HEADER_FILES})
  59. set_target_properties(${FASTWEBCORE} PROPERTIES OUTPUT_NAME_DEBUG "${FASTWEBCORE}_d" OUTPUT_NAME_RELEASE ${FASTWEBCORE})
  60. if(MSVC)
  61. target_link_libraries(${FASTWEBCORE} PRIVATE
  62. odbc32.lib
  63. User32.lib
  64. Advapi32.lib
  65. IPHLPAPI.lib
  66. WS2_32.lib
  67. Shell32.lib
  68. lualib
  69. ${YLIB}/lib/libcrypto_static_win64.lib
  70. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.lib>
  71. $<$<CONFIG:Debug>:${YLIB}/lib/leveldb_d.lib>
  72. $<$<CONFIG:Debug>:${YLIB}/lib/ylib_d.lib>
  73. $<$<CONFIG:Debug>:${YLIB}/lib/sqlite3_d.lib>
  74. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.lib>
  75. $<$<CONFIG:Release>:${YLIB}/lib/leveldb.lib>
  76. $<$<CONFIG:Release>:${YLIB}/lib/ylib.lib>
  77. $<$<CONFIG:Release>:${YLIB}/lib/sqlite3.lib>
  78. )
  79. else()
  80. set(CMAKE_INSTALL_RPATH "/usr/local/lib")
  81. link_directories(/usr/lib/x86_64-linux-gnu)
  82. link_directories(/usr/local/lib)
  83. target_link_libraries(${FASTWEBCORE}
  84. hpsocket
  85. ylib
  86. leveldb
  87. crypto
  88. /opt/lua54/lib/liblua.a
  89. pthread
  90. sqlite3
  91. dl
  92. rt
  93. stdc++fs
  94. )
  95. endif()
  96. add_definitions(-DFASTWEB_EXE)
  97. # 编译测试调用示例
  98. add_executable(${PROJECT_NAME}
  99. tests/main.cpp
  100. tests/fastweb.cpp
  101. )
  102. if(MSVC)
  103. target_link_libraries(${PROJECT_NAME} PRIVATE
  104. ${FASTWEBCORE}
  105. odbc32.lib
  106. User32.lib
  107. Advapi32.lib
  108. IPHLPAPI.lib
  109. WS2_32.lib
  110. Shell32.lib
  111. ${YLIB}/lib/libcrypto_static_win64.lib
  112. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.lib>
  113. $<$<CONFIG:Debug>:${YLIB}/lib/ylib_d.lib>
  114. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.lib>
  115. $<$<CONFIG:Release>:${YLIB}/lib/ylib.lib>
  116. )
  117. else()
  118. target_link_libraries(${PROJECT_NAME}
  119. ${FASTWEBCORE}
  120. hpsocket
  121. ylib
  122. pthread
  123. mysqlcppconn
  124. ssl
  125. z
  126. )
  127. endif()
  128. set_target_properties(${PROJECT_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}")
  129. ######################## 安装 ########################
  130. if(MSVC)
  131. install(TARGETS ${FASTWEBCORE} DESTINATION $<IF:$<CONFIG:Debug>,bin/debug,bin/release>)
  132. install(TARGETS ${PROJECT_NAME} DESTINATION $<IF:$<CONFIG:Debug>,bin/debug,bin/release>)
  133. install(FILES ${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.dll DESTINATION bin/debug)
  134. install(FILES ${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.dll DESTINATION bin/release)
  135. install(FILES config.ini DESTINATION bin/debug)
  136. install(FILES config.ini DESTINATION bin/release)
  137. install(DIRECTORY ${PROJECT_SOURCE_DIR}/www DESTINATION bin/debug)
  138. install(DIRECTORY ${PROJECT_SOURCE_DIR}/config DESTINATION bin/debug)
  139. install(DIRECTORY ${PROJECT_SOURCE_DIR}/www DESTINATION bin/release)
  140. install(DIRECTORY ${PROJECT_SOURCE_DIR}/config DESTINATION bin/release)
  141. install(FILES ${PROJECT_SOURCE_DIR}/src/core/entry.h DESTINATION include)
  142. install(FILES ${PROJECT_SOURCE_DIR}/include/dll_interface.h DESTINATION include)
  143. install(FILES ${PROJECT_SOURCE_DIR}/src/module/basemodule.h DESTINATION include)
  144. install(DIRECTORY ${PROJECT_SOURCE_DIR}/3rdparty/lua/include/ DESTINATION include/lua)
  145. else()
  146. install(TARGETS ${FASTWEBCORE} DESTINATION lib)
  147. install(TARGETS ${PROJECT_NAME} DESTINATION bin)
  148. install(FILES ${PROJECT_SOURCE_DIR}/src/core/entry.h DESTINATION include/${PROJECT_NAME})
  149. install(FILES ${PROJECT_SOURCE_DIR}/include/dll_interface.h DESTINATION include/${PROJECT_NAME})
  150. install(FILES ${PROJECT_SOURCE_DIR}/src/module/basemodule.h DESTINATION include/${PROJECT_NAME})
  151. install(FILES config.ini DESTINATION share/${PROJECT_NAME})
  152. install(DIRECTORY ${PROJECT_SOURCE_DIR}/www DESTINATION share/${PROJECT_NAME})
  153. install(DIRECTORY ${PROJECT_SOURCE_DIR}/config DESTINATION share/${PROJECT_NAME})
  154. endif()
  155. install(DIRECTORY ${PROJECT_SOURCE_DIR}/3rdparty/sol DESTINATION include)