cmake_minimum_required(VERSION 3.16) project(AV_Framework) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 设置编译选项 if(MSVC) add_compile_options(/W3) else() add_compile_options(-Wall -Wextra) endif() # 查找线程库 find_package(Threads REQUIRED) # 查找FFmpeg库 find_package(PkgConfig REQUIRED) pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswscale libswresample ) # 基础库源文件 set(BASE_SOURCES code/base/logger.cpp code/base/media_thread_base.cpp code/base/media_common.cpp ) # 基础库头文件 set(BASE_HEADERS code/base/types.h code/base/logger.h code/base/media_thread_base.h code/base/media_common.h ) # 编解码库源文件 set(CODEC_SOURCES code/codec/codec_abstract_codec.cpp code/codec/codec_video_encoder.cpp code/codec/codec_audio_encoder.cpp ) # 编解码库头文件 set(CODEC_HEADERS code/codec/codec_abstract_codec.h code/codec/codec_video_encoder.h code/codec/codec_audio_encoder.h ) # 创建基础库 add_library(av_base STATIC ${BASE_SOURCES} ${BASE_HEADERS}) target_include_directories(av_base PUBLIC .) target_link_libraries(av_base PUBLIC Threads::Threads) # 创建编解码库 add_library(av_codec STATIC ${CODEC_SOURCES} ${CODEC_HEADERS}) target_include_directories(av_codec PUBLIC . ${FFMPEG_INCLUDE_DIRS}) target_link_libraries(av_codec PUBLIC av_base ${FFMPEG_LIBRARIES}) target_compile_options(av_codec PRIVATE ${FFMPEG_CFLAGS_OTHER}) # 创建完整的AV库 add_library(av_framework STATIC) target_link_libraries(av_framework PUBLIC av_base av_codec) # 测试程序 add_executable(test_basic test_basic.cpp) target_link_libraries(test_basic av_base) # 编解码测试程序 add_executable(test_codec test_codec.cpp) target_link_libraries(test_codec av_framework) # 设置输出目录 set_target_properties(test_basic test_codec PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) # 如果是Windows,复制运行时库 if(WIN32) set_target_properties(test_basic test_codec PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) endif() # 安装规则 install(TARGETS av_framework av_base av_codec ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) install(FILES ${BASE_HEADERS} DESTINATION include/av/base ) install(FILES ${CODEC_HEADERS} DESTINATION include/av/codec )