CMakeLists.txt 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. cmake_minimum_required(VERSION 3.10)
  2. project(server LANGUAGES CXX)
  3. set(CMAKE_CXX_STANDARD 20)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_CXX_EXTENSIONS OFF)
  6. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  7. if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
  8. file(CREATE_LINK
  9. "${CMAKE_BINARY_DIR}/compile_commands.json"
  10. "${CMAKE_SOURCE_DIR}/compile_commands.json"
  11. SYMBOLIC)
  12. endif()
  13. add_compile_definitions(HPSOCKET_STATIC_LIB YLIB_STATIC)
  14. file(GLOB_RECURSE SERVER_SOURCES CONFIGURE_DEPENDS
  15. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  16. )
  17. add_executable(${PROJECT_NAME} ${SERVER_SOURCES})
  18. set(YLIB_ROOT "/usr/local" CACHE PATH "ylib 安装前缀")
  19. set(HPSOCKET_ROOT "/usr/local" CACHE PATH "HPSocket 头文件前缀")
  20. target_include_directories(${PROJECT_NAME} PRIVATE
  21. ${CMAKE_SOURCE_DIR}/src
  22. ${CMAKE_SOURCE_DIR}/..
  23. ${YLIB_ROOT}/include
  24. ${HPSOCKET_ROOT}/include
  25. /usr/include
  26. )
  27. if(MSVC)
  28. target_compile_options(${PROJECT_NAME} PRIVATE /W3 /wd4819)
  29. set(YLIB_LIB_DIR "${YLIB_ROOT}/lib" CACHE PATH "ylib 库目录")
  30. set(HPSOCKET_LIB_DIR "${CMAKE_SOURCE_DIR}/3rdparty/HP-Socket/Lib" CACHE PATH "HPSocket 库目录")
  31. target_link_directories(${PROJECT_NAME} PRIVATE ${YLIB_LIB_DIR} ${HPSOCKET_LIB_DIR})
  32. target_link_libraries(${PROJECT_NAME} PRIVATE
  33. $<$<CONFIG:Debug>:ylib_d>
  34. $<$<CONFIG:Release>:ylib>
  35. $<$<CONFIG:Debug>:HPSocket_D>
  36. $<$<CONFIG:Release>:HPSocket>
  37. ws2_32 iphlpapi advapi32 user32 shell32
  38. )
  39. else()
  40. target_compile_options(${PROJECT_NAME} PRIVATE -Wall -fPIC)
  41. target_link_directories(${PROJECT_NAME} PRIVATE
  42. /usr/local/lib
  43. /usr/lib/x86_64-linux-gnu
  44. )
  45. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  46. set(_YLIB_NAME ylib_d)
  47. else()
  48. set(_YLIB_NAME ylib)
  49. endif()
  50. target_link_libraries(${PROJECT_NAME} PRIVATE
  51. ${_YLIB_NAME}
  52. hpsocket
  53. mysqlcppconn
  54. hiredis
  55. curl
  56. ssl
  57. crypto
  58. pthread
  59. dl
  60. rt
  61. z
  62. )
  63. endif()