CMakeLists.txt 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. cmake_minimum_required(VERSION 3.16)
  2. project(AV_Framework)
  3. # 设置C++标准
  4. set(CMAKE_CXX_STANDARD 17)
  5. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  6. # 设置编译选项
  7. if(MSVC)
  8. add_compile_options(/W3)
  9. else()
  10. add_compile_options(-Wall -Wextra)
  11. endif()
  12. # 查找线程库
  13. find_package(Threads REQUIRED)
  14. # 查找FFmpeg库
  15. find_package(PkgConfig REQUIRED)
  16. pkg_check_modules(FFMPEG REQUIRED
  17. libavcodec
  18. libavformat
  19. libavutil
  20. libswscale
  21. libswresample
  22. )
  23. # 基础库源文件
  24. set(BASE_SOURCES
  25. code/base/logger.cpp
  26. code/base/media_thread_base.cpp
  27. code/base/media_common.cpp
  28. )
  29. # 基础库头文件
  30. set(BASE_HEADERS
  31. code/base/types.h
  32. code/base/logger.h
  33. code/base/media_thread_base.h
  34. code/base/media_common.h
  35. )
  36. # 编解码库源文件
  37. set(CODEC_SOURCES
  38. code/codec/codec_abstract_codec.cpp
  39. code/codec/codec_video_encoder.cpp
  40. code/codec/codec_audio_encoder.cpp
  41. )
  42. # 编解码库头文件
  43. set(CODEC_HEADERS
  44. code/codec/codec_abstract_codec.h
  45. code/codec/codec_video_encoder.h
  46. code/codec/codec_audio_encoder.h
  47. )
  48. # 创建基础库
  49. add_library(av_base STATIC ${BASE_SOURCES} ${BASE_HEADERS})
  50. target_include_directories(av_base PUBLIC .)
  51. target_link_libraries(av_base PUBLIC Threads::Threads)
  52. # 创建编解码库
  53. add_library(av_codec STATIC ${CODEC_SOURCES} ${CODEC_HEADERS})
  54. target_include_directories(av_codec PUBLIC . ${FFMPEG_INCLUDE_DIRS})
  55. target_link_libraries(av_codec PUBLIC av_base ${FFMPEG_LIBRARIES})
  56. target_compile_options(av_codec PRIVATE ${FFMPEG_CFLAGS_OTHER})
  57. # 创建完整的AV库
  58. add_library(av_framework STATIC)
  59. target_link_libraries(av_framework PUBLIC av_base av_codec)
  60. # 测试程序
  61. add_executable(test_basic test_basic.cpp)
  62. target_link_libraries(test_basic av_base)
  63. # 编解码测试程序
  64. add_executable(test_codec test_codec.cpp)
  65. target_link_libraries(test_codec av_framework)
  66. # 设置输出目录
  67. set_target_properties(test_basic test_codec PROPERTIES
  68. RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
  69. )
  70. # 如果是Windows,复制运行时库
  71. if(WIN32)
  72. set_target_properties(test_basic test_codec PROPERTIES
  73. VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin
  74. )
  75. endif()
  76. # 安装规则
  77. install(TARGETS av_framework av_base av_codec
  78. ARCHIVE DESTINATION lib
  79. LIBRARY DESTINATION lib
  80. RUNTIME DESTINATION bin
  81. )
  82. install(FILES ${BASE_HEADERS}
  83. DESTINATION include/av/base
  84. )
  85. install(FILES ${CODEC_HEADERS}
  86. DESTINATION include/av/codec
  87. )