CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. cmake_minimum_required(VERSION 3.5)
  2. project("fastweb")
  3. # 设置自定义配置类型
  4. if(MSVC)
  5. set(CMAKE_CONFIGURATION_TYPES "Debug;Release;DebugDll;ReleaseDll" CACHE STRING "Build config types" FORCE)
  6. endif()
  7. # C++等级
  8. set(CMAKE_CXX_STANDARD 20)
  9. set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
  10. set(FASTWEBCORE ${PROJECT_NAME}core)
  11. # 安装复制
  12. set(CMAKE_INSTALL_ALWAYS_COPY TRUE)
  13. # Recursively get all source files
  14. file(GLOB_RECURSE SOURCE_FILES
  15. "${PROJECT_SOURCE_DIR}/src/*.cpp"
  16. )
  17. file(GLOB_RECURSE HEADER_FILES
  18. "${PROJECT_SOURCE_DIR}/src/*.h"
  19. )
  20. foreach(source IN LISTS SOURCE_FILES)
  21. get_filename_component(source_path "${source}" PATH)
  22. file(RELATIVE_PATH source_path_rel "${PROJECT_SOURCE_DIR}" "${source_path}")
  23. string(REPLACE "/" "\\" source_path_rel_win "${source_path_rel}")
  24. source_group(${source_path_rel_win} FILES "${source}")
  25. endforeach()
  26. foreach(header IN LISTS HEADER_FILES)
  27. get_filename_component(header_path "${header}" PATH)
  28. file(RELATIVE_PATH header_path_rel "${PROJECT_SOURCE_DIR}" "${header_path}")
  29. string(REPLACE "/" "\\" header_path_rel_win "${header_path_rel}")
  30. source_group(${header_path_rel_win} FILES "${header}")
  31. endforeach()
  32. set(YLIB ${CMAKE_INSTALL_PREFIX}/../ylib)
  33. include_directories(${PROJECT_SOURCE_DIR}/src)
  34. if(MSVC)
  35. include_directories(${PROJECT_SOURCE_DIR}/src)
  36. include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
  37. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Windows/Include)
  38. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/lua)
  39. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/soci/include)
  40. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/mysql/include/jdbc)
  41. include_directories(${YLIB}/include)
  42. add_compile_options(/W3 /wd4819)
  43. else()
  44. include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
  45. include_directories(/usr/include/lua5.3/)
  46. endif()
  47. # 根据构建类型添加定义
  48. add_library(${FASTWEBCORE} SHARED ${SOURCE_FILES} ${HEADER_FILES})
  49. set_target_properties(${FASTWEBCORE} PROPERTIES OUTPUT_NAME_DEBUG "${FASTWEBCORE}_d" OUTPUT_NAME_RELEASE ${FASTWEBCORE})
  50. add_executable(${PROJECT_NAME} tests/main.cpp)
  51. link_directories(/usr/lib/x86_64-linux-gnu)
  52. link_directories(/usr/local/lib)
  53. if(MSVC)
  54. function(target_link_common_libraries target_name)
  55. target_link_libraries(${target_name}
  56. odbc32.lib
  57. User32.lib
  58. Advapi32.lib
  59. IPHLPAPI.lib
  60. WS2_32.lib
  61. Shell32.lib
  62. ${YLIB}/lib/libcrypto_static_win64.lib
  63. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.lib>
  64. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/mysqlcppconn.lib>
  65. $<$<CONFIG:Debug>:${YLIB}/lib/leveldb_d.lib>
  66. $<$<CONFIG:Debug>:${YLIB}/lib/libzip_d.lib>
  67. $<$<CONFIG:Debug>:${YLIB}/lib/lua_d.lib>
  68. $<$<CONFIG:Debug>:${YLIB}/lib/sqlite3_d.lib>
  69. $<$<CONFIG:Debug>:${YLIB}/lib/ylib_d.lib>
  70. $<$<CONFIG:Debug>:${YLIB}/lib/zlib_d.lib>
  71. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/libsoci_core_4_1.lib>
  72. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/libsoci_empty_4_1.lib>
  73. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/libsoci_odbc_4_1.lib>
  74. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/soci_core_4_1.lib>
  75. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/soci_empty_4_1.lib>
  76. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/soci_odbc_4_1.lib>
  77. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.lib>
  78. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/mysqlcppconn.lib>
  79. $<$<CONFIG:Release>:${YLIB}/lib/leveldb.lib>
  80. $<$<CONFIG:Release>:${YLIB}/lib/libzip.lib>
  81. $<$<CONFIG:Release>:${YLIB}/lib/lua.lib>
  82. $<$<CONFIG:Release>:${YLIB}/lib/sqlite3.lib>
  83. $<$<CONFIG:Release>:${YLIB}/lib/ylib.lib>
  84. $<$<CONFIG:Release>:${YLIB}/lib/zlib.lib>
  85. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/libsoci_core_4_1.lib>
  86. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/libsoci_empty_4_1.lib>
  87. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/libsoci_odbc_4_1.lib>
  88. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/soci_core_4_1.lib>
  89. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/soci_empty_4_1.lib>
  90. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/soci_odbc_4_1.lib>
  91. )
  92. endfunction()
  93. target_link_common_libraries(${FASTWEBCORE})
  94. target_link_libraries(${PROJECT_NAME} ${FASTWEBCORE})
  95. else()
  96. target_link_libraries(${FASTWEBCORE}
  97. hpsocket
  98. ylib
  99. leveldb
  100. soci_core
  101. soci_firebird
  102. soci_mysql
  103. soci_odbc
  104. soci_postgresql
  105. soci_sqlite3
  106. crypto
  107. lua5.3
  108. mysqlcppconn
  109. pthread
  110. )
  111. endif()
  112. ######################## 安装 ########################
  113. install(TARGETS ${FASTWEBCORE} DESTINATION bin)
  114. install(TARGETS ${PROJECT_NAME} DESTINATION bin)
  115. if(MSVC)
  116. install(FILES
  117. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.dll>
  118. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/libcrypto-3-x64.dll>
  119. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/libssl-3-x64.dll>
  120. $<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/mysqlcppconn-9-vs14.dll>
  121. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.dll>
  122. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/libcrypto-3-x64.dll>
  123. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/libssl-3-x64.dll>
  124. $<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/mysqlcppconn-9-vs14.dll>
  125. DESTINATION bin)
  126. endif()
  127. install(FILES config.ini DESTINATION bin)
  128. install(DIRECTORY ${PROJECT_SOURCE_DIR}/scripts DESTINATION bin)