CMakeLists.txt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4)
  2. SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
  3. SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
  4. SET(CMAKE_USE_RELATIVE_PATHS ON)
  5. IF(NOT CMAKE_BUILD_TYPE)
  6. SET(CMAKE_BUILD_TYPE "Debug")
  7. ENDIF()
  8. PROJECT(Cpp)
  9. OPTION(TESTS "Decide if the test suite shall be built or not" ON)
  10. OPTION(PROFILE "Use Google Perftool Profile" OFF)
  11. OPTION(TCMALLOC "Use Google Perftool Tcmalloc" OFF)
  12. IF(TESTS)
  13. ENABLE_TESTING()
  14. ENDIF()
  15. # 设置头文件查找路径
  16. INCLUDE_DIRECTORIES(Platform)
  17. INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/Platform)
  18. INCLUDE_DIRECTORIES(Game)
  19. INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/Game)
  20. INCLUDE_DIRECTORIES(ThirdParty)
  21. INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/ThirdParty)
  22. # 检查库
  23. FIND_PACKAGE(Protobuf REQUIRED)
  24. INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS})
  25. FIND_PACKAGE(MysqlConnector)
  26. INCLUDE_DIRECTORIES(${MYSQL_CONNECTOR_INCLUDE_DIRS})
  27. FIND_PACKAGE(Perftools REQUIRED)
  28. FIND_PACKAGE(Mono)
  29. SET(Boost_USE_STATIC_LIBS ON)
  30. SET(Boost_USE_MULTITHREADED ON)
  31. SET(Boost_USE_STATIC_RUNTIME ON)
  32. FIND_PACKAGE(Boost REQUIRED thread system filesystem log)
  33. # 设置第三方库
  34. SET(ThirdPartyLibs
  35. gtest
  36. gmock
  37. ${PROTOBUF_LIBRARIES}
  38. ${Boost_LIBRARIES}
  39. ${MYSQL_CONNECTOR_LIBRARIES}
  40. )
  41. IF(UNIX)
  42. SET(ThirdPartyLibs ${ThirdPartyLibs} pthread)
  43. ENDIF()
  44. IF(TCMALLOC)
  45. SET(ThirdPartyLibs ${ThirdPartyLibs} ${PERFTOOLS_DEBUG_LIBRARIES})
  46. INCLUDE_DIRECTORIES(${PERFTOOLS_INCLUDE_DIRS})
  47. ENDIF()
  48. IF(PROFILE)
  49. SET(ThirdPartyLibs ${ThirdPartyLibs} ${PERFTOOLS_PROFILE_LIBRARIES})
  50. INCLUDE_DIRECTORIES(${PERFTOOLS_INCLUDE_DIRS})
  51. ENDIF()
  52. # 设置编译选项
  53. IF(WIN32)
  54. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
  55. SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
  56. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /WX /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 /wd4819")
  57. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libc.lib")
  58. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libcmt.lib")
  59. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:msvcrt.lib")
  60. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libcd.lib")
  61. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:msvcrtd.lib")
  62. SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:msvcprtd.lib")
  63. ADD_DEFINITIONS(-DBOOST_ALL_NO_LIB -D_WIN32_WINNT=0x0601)
  64. # gtest gmock 用到std::tuple超过了默认最大模板参数
  65. ADD_DEFINITIONS(-D_VARIADIC_MAX=10)
  66. ELSEIF(UNIX)
  67. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
  68. ENDIF()
  69. # 子目录
  70. ADD_SUBDIRECTORY(Platform)
  71. ADD_SUBDIRECTORY(ThirdParty)