CMakeLists.txt 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. # 指定CMake版本
  2. cmake_minimum_required(VERSION 3.5)
  3. #使能c++11
  4. set(CMAKE_CXX_STANDARD 11)
  5. # 项目信息
  6. project(Demo C CXX)
  7. # 设置为调试版本
  8. set(CMAKE_BUILD_TYPE Debug)
  9. # 设置可执行文件路径
  10. set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/source/bin/)
  11. # ---[ Options
  12. option(build_inference "build module inference" ON)
  13. option(build_decoder "build module decoder" ON)
  14. option(build_inifile "build module inifile" ON)
  15. option(build_dataType "build module dataType" ON)
  16. option(build_md5 "build module md5" ON)
  17. option(build_sqlHelper "build module sqlHelper" ON)
  18. option(build_userApp "build module userApp" ON)
  19. option(build_TCPClient "build module TCPClient" ON)
  20. option(WITH_FFMPEG "with ffmpeg" ON)
  21. option(WITH_OPENCV "with opencv" ON)
  22. option(WITH_ZLMediaKit "with ZLMediaKit" OFF)
  23. set(ENABLE_MYSQL ON CACHE BOOL "enable mysql")
  24. # ---[ Google-gflags
  25. if(CMAKE_TOOLCHAIN_FILE)
  26. set(GFLAGS_LIBRARIES gflags)
  27. else()
  28. include("${PROJECT_SOURCE_DIR}/cmake/FindGFlags.cmake")
  29. endif()
  30. list(APPEND 3RDPARTY_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIRS})
  31. list(APPEND 3RDPARTY_LIBS ${GFLAGS_LIBRARIES})
  32. # ---[ Google-glog
  33. if(CMAKE_TOOLCHAIN_FILE)
  34. set(GLOG_LIBRARIES glog)
  35. else()
  36. include("${PROJECT_SOURCE_DIR}/cmake/FindGlog.cmake")
  37. endif()
  38. list(APPEND 3RDPARTY_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS})
  39. list(APPEND 3RDPARTY_LIBS ${GLOG_LIBRARIES})
  40. list(APPEND 3RDPARTY_LIBS mpeg mov flv mk_api zltoolkit zlmediakit)
  41. ##OpenCV
  42. if(WITH_OPENCV)
  43. if(CMAKE_TOOLCHAIN_FILE)
  44. if(EXISTS ${PROJECT_SOURCE_DIR}/include/opencv)
  45. set(OpenCV_LIBS opencv_core opencv_imgproc opencv_highgui opencv_features2d opencv_flann)
  46. if(EXISTS ${PROJECT_SOURCE_DIR}/include/opencv2/imgcodecs)
  47. list(APPEND OpenCV_LIBS opencv_imgcodecs)
  48. endif()
  49. if(EXISTS ${PROJECT_SOURCE_DIR}/include/opencv2/videoio)
  50. list(APPEND OpenCV_LIBS opencv_videoio)
  51. endif()
  52. message(STATUS "HAVE_OPENCV enabled")
  53. message(STATUS "opencv libraries: ${OpenCV_LIBS}")
  54. set(HAVE_OPENCV true)
  55. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENCV")
  56. else()
  57. set (HAVE_OPENCV false)
  58. endif()
  59. else()
  60. set(OpenCV_FIND_QUIETLY true)
  61. #find_package(OpenCV REQUIRED) //this will include opencv_ts which result in crash on centos
  62. find_package(OpenCV OPTIONAL_COMPONENTS imgcodecs)
  63. find_package(OpenCV OPTIONAL_COMPONENTS videoio)
  64. set(optional_opencv_libs ${OpenCV_LIBS})
  65. find_package(OpenCV REQUIRED core imgproc highgui features2d)
  66. if(OpenCV_FOUND)
  67. if(imgcodecs_FOUND)
  68. list(APPEND OpenCV_LIBS optional_opencv_libs)
  69. endif()
  70. message(STATUS "HAVE_OPENCV enabled")
  71. message(STATUS "opencv libraries: ${OpenCV_LIBS}")
  72. set(HAVE_OPENCV true)
  73. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENCV")
  74. else()
  75. set (HAVE_OPENCV false)
  76. endif()
  77. endif()
  78. else()
  79. set (HAVE_OPENCV false)
  80. endif()
  81. ##FFmpeg
  82. if(WITH_FFMPEG)
  83. if(CMAKE_TOOLCHAIN_FILE)
  84. if(EXISTS ${PROJECT_SOURCE_DIR}/include/libavcodec)
  85. set(FFMPEG_LIBRARIES avformat avcodec avutil swscale swresample)
  86. if (WITH_FFMPEG_AVDEVICE)
  87. list(APPEND FFMPEG_LIBRARIES avdevice)
  88. endif ()
  89. set(HAVE_FFMPEG true)
  90. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_FFMPEG")
  91. message(STATUS "HAVE_FFMPEG enabled")
  92. message(STATUS "ffmpeg libraries: ${FFMPEG_LIBRARIES}")
  93. else()
  94. set (HAVE_FFMPEG false)
  95. endif()
  96. else()
  97. set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
  98. find_package(FFmpeg REQUIRED)
  99. if (FFMPEG_FOUND)
  100. include_directories(${FFMPEG_INCLUDE_DIR})
  101. set(HAVE_FFMPEG true)
  102. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_FFMPEG")
  103. message(STATUS "HAVE_FFMPEG enabled")
  104. message(STATUS "ffmpeg include: ${FFMPEG_INCLUDE_DIR}")
  105. message(STATUS "ffmpeg libraries: ${FFMPEG_LIBRARIES}")
  106. else ()
  107. message(FATAL_ERROR "Can't find FFmpeg libs!")
  108. set (HAVE_FFMPEG false)
  109. endif ()
  110. endif()
  111. else()
  112. set (HAVE_FFMPEG false)
  113. endif()
  114. # -- ZLMediaKit
  115. if(WITH_ZLMediaKit)
  116. add_subdirectory(${PROJECT_SOURCE_DIR}/3rdparty)
  117. endif()
  118. #查找mysql是否安装
  119. find_package(MYSQL QUIET)
  120. if(MYSQL_FOUND AND ENABLE_MYSQL)
  121. message(STATUS "找到mysqlclient库:\"${MYSQL_INCLUDE_DIR}\",ENABLE_MYSQL宏已打开")
  122. include_directories(${MYSQL_INCLUDE_DIR})
  123. include_directories(${MYSQL_INCLUDE_DIR}/mysql)
  124. add_definitions(-DENABLE_MYSQL)
  125. list(APPEND 3RDPARTY_LIBS ${MYSQL_LIBRARIES})
  126. endif()
  127. #设置工程源码根目录
  128. set(ToolKit_Root ${PROJECT_SOURCE_DIR}/3rdparty/ZLMediaKit/3rdpart/ZLToolKit/src)
  129. set(MediaKit_Root ${PROJECT_SOURCE_DIR}/3rdparty/ZLMediaKit/src)
  130. set(MediaServer_Root ${PROJECT_SOURCE_DIR}/3rdparty/ZLMediaKit/3rdpart/media-server)
  131. # -- include
  132. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/rapidjson/include/)
  133. include_directories(${PROJECT_SOURCE_DIR}/modules/inference/include/)
  134. include_directories(${PROJECT_SOURCE_DIR}/modules/decoder/include/)
  135. include_directories(${PROJECT_SOURCE_DIR}/modules/userApp/include/)
  136. include_directories(${PROJECT_SOURCE_DIR}/modules/md5/include/)
  137. include_directories(${PROJECT_SOURCE_DIR}/modules/inifile/include/)
  138. include_directories(${PROJECT_SOURCE_DIR}/modules/TCPClient/include/)
  139. include_directories(${PROJECT_SOURCE_DIR}/modules/dataType/include/)
  140. include_directories(${ToolKit_Root})
  141. include_directories(${MediaKit_Root})
  142. include_directories(${PROJECT_SOURCE_DIR}/3rdparty/ZLMediaKit)
  143. # -- include gstreamer
  144. include_directories(/usr/include/gstreamer-1.0)
  145. include_directories(/usr/include/glib-2.0/)
  146. include_directories(/usr/lib/aarch64-linux-gnu/glib-2.0/include)
  147. include_directories(/opt/nvidia/deepstream/deepstream-5.0/sources/includes/)
  148. # 寻找当前目录下所有源文件
  149. aux_source_directory(./source/src DIR_SRCS)
  150. # 添加编译参数
  151. add_compile_options(-Wall -std=c++11 -O2 -g -DPLATFORM_TEGRA -DPLATFORM_TEGRA)
  152. link_directories(${PROJECT_SOURCE_DIR}/lib)
  153. link_directories(/opt/nvidia/deepstream/deepstream-5.0/lib/)
  154. list(APPEND Source_LINKER_LIBS mov flv mk_api mpeg zlmediakit ZLToolKit dl ${3RDPARTY_LIBS} ${OpenCV_LIBS} ${FFMPEG_LIBRARIES} pthread)
  155. list(APPEND ALL_LINKER_LIBS gstreamer-1.0 gobject-2.0 glib-2.0 nvdsgst_meta nvds_meta nvdsgst_helper m ${Source_LINKER_LIBS})
  156. add_subdirectory(${PROJECT_SOURCE_DIR}/modules)
  157. # 指定生成的目标
  158. add_executable(main ${DIR_SRCS})
  159. # 链接
  160. target_link_libraries(main ${ALL_LINKER_LIBS} modules)