FFmpeg8.0.1 Mac环境 CMake本地调试配置

cmake_minimum_required(VERSION 3.20)

project(ffmpeg C)

set(CMAKE_C_STANDARD 11)

set(CMAKE_BUILD_TYPE Debug)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

Debug编译选项(兼容 Apple ld)

set(CMAKE_C_FLAGS_DEBUG "-g -O0 -DDEBUG -fno-omit-frame-pointer")

包含头文件路径

include_directories(

${CMAKE_SOURCE_DIR}

${CMAKE_SOURCE_DIR}/ffbuild

)

============================================================================

重要说明:

由于 macOS 上 GCC 14 的 fixincludes 问题(找不到 _bounds.h),

我们使用混合方案:

1. 用 make 编译源码(FFmpeg 的 configure 会自动处理兼容性问题)

2. CMake 直接链接已编译的 .o 文件

3. 这样既能调试,又避免了 GCC/macOS 的兼容性问题

============================================================================

使用已编译的 .o 文件创建可执行文件

add_executable(ffmpeg_debug

${CMAKE_CURRENT_BINARY_DIR}/dummy.c

)

add_executable(ffprobe_debug

${CMAKE_CURRENT_BINARY_DIR}/dummy.c

)

创建dummy.c文件

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dummy.c

"// Dummy file for CMake

// Actual linking uses pre-compiled .o files from make

")

收集所有make编译好的.o文件

file(GLOB FFMPEG_OBJECTS

fftools/ffmpeg.o

fftools/ffmpeg_*.o

fftools/cmdutils.o

fftools/opt_common.o

fftools/sync_queue.o

fftools/thread_queue.o

)

file(GLOB TEXTFORMAT_OBJECTS

fftools/textformat/*.o

)

file(GLOB GRAPH_OBJECTS

fftools/graph/*.o

)

file(GLOB RESOURCES_OBJECTS

fftools/resources/*.o

)

set(FFPROBE_OBJECTS

fftools/ffprobe.o

fftools/cmdutils.o

fftools/opt_common.o

)

macOS 系统框架

find_library(COREFOUNDATION_FRAMEWORK CoreFoundation)

find_library(COREMEDIA_FRAMEWORK CoreMedia)

find_library(COREVIDEO_FRAMEWORK CoreVideo)

find_library(VIDEOTOOLBOX_FRAMEWORK VideoToolbox)

find_library(AUDIOTOOLBOX_FRAMEWORK AudioToolbox)

find_library(COREAUDIO_FRAMEWORK CoreAudio)

find_library(AVFOUNDATION_FRAMEWORK AVFoundation)

find_library(COREIMAGE_FRAMEWORK CoreImage)

find_library(APPKIT_FRAMEWORK AppKit)

find_library(CORESERVICES_FRAMEWORK CoreServices)

find_library(SECURITY_FRAMEWORK Security)

find_library(COREGRAPHICS_FRAMEWORK CoreGraphics)

find_library(OPENGL_FRAMEWORK OpenGL)

链接时使用make编译好的.o文件

target_link_libraries(ffmpeg_debug

${FFMPEG_OBJECTS}

${TEXTFORMAT_OBJECTS}

${GRAPH_OBJECTS}

${RESOURCES_OBJECTS}

${CMAKE_SOURCE_DIR}/libavformat/libavformat.a

${CMAKE_SOURCE_DIR}/libavcodec/libavcodec.a

${CMAKE_SOURCE_DIR}/libavfilter/libavfilter.a

${CMAKE_SOURCE_DIR}/libavdevice/libavdevice.a

${CMAKE_SOURCE_DIR}/libswscale/libswscale.a

${CMAKE_SOURCE_DIR}/libswresample/libswresample.a

${CMAKE_SOURCE_DIR}/libavutil/libavutil.a

macOS 框架

${COREFOUNDATION_FRAMEWORK}

${COREMEDIA_FRAMEWORK}

${COREVIDEO_FRAMEWORK}

${VIDEOTOOLBOX_FRAMEWORK}

${AUDIOTOOLBOX_FRAMEWORK}

${COREAUDIO_FRAMEWORK}

${AVFOUNDATION_FRAMEWORK}

${COREIMAGE_FRAMEWORK}

${APPKIT_FRAMEWORK}

${CORESERVICES_FRAMEWORK}

${SECURITY_FRAMEWORK}

${COREGRAPHICS_FRAMEWORK}

${OPENGL_FRAMEWORK}

标准库

m z pthread iconv bz2 lzma

)

target_link_libraries(ffprobe_debug

${FFPROBE_OBJECTS}

${TEXTFORMAT_OBJECTS}

${RESOURCES_OBJECTS}

${CMAKE_SOURCE_DIR}/libavformat/libavformat.a

${CMAKE_SOURCE_DIR}/libavcodec/libavcodec.a

${CMAKE_SOURCE_DIR}/libavfilter/libavfilter.a

${CMAKE_SOURCE_DIR}/libavdevice/libavdevice.a

${CMAKE_SOURCE_DIR}/libswscale/libswscale.a

${CMAKE_SOURCE_DIR}/libswresample/libswresample.a

${CMAKE_SOURCE_DIR}/libavutil/libavutil.a

macOS 框架

${COREFOUNDATION_FRAMEWORK}

${COREMEDIA_FRAMEWORK}

${COREVIDEO_FRAMEWORK}

${VIDEOTOOLBOX_FRAMEWORK}

${AUDIOTOOLBOX_FRAMEWORK}

${COREAUDIO_FRAMEWORK}

${AVFOUNDATION_FRAMEWORK}

${COREIMAGE_FRAMEWORK}

${APPKIT_FRAMEWORK}

${CORESERVICES_FRAMEWORK}

${SECURITY_FRAMEWORK}

${COREGRAPHICS_FRAMEWORK}

${OPENGL_FRAMEWORK}

标准库

m z pthread iconv bz2 lzma

)

============================================================================

以下部分用于IDE代码导航和跳转

添加所有源文件作为库的OBJECT目标,这样可以在CLion中浏览和跳转代码

但设置为EXCLUDE_FROM_ALL,不实际编译

============================================================================

fftools 源文件(用于代码导航)

file(GLOB_RECURSE FFTOOLS_SOURCES fftools/*.c)

库源文件(用于代码导航)

file(GLOB_RECURSE AVCODEC_SOURCES libavcodec/.c)
file(GLOB_RECURSE AVFORMAT_SOURCES libavformat/
.c)

file(GLOB_RECURSE AVUTIL_SOURCES libavutil/.c)
file(GLOB_RECURSE AVFILTER_SOURCES libavfilter/
.c)

file(GLOB_RECURSE AVDEVICE_SOURCES libavdevice/.c)
file(GLOB_RECURSE SWSCALE_SOURCES libswscale/
.c)

file(GLOB_RECURSE SWRESAMPLE_SOURCES libswresample/*.c)

创建用于代码导航的虚拟目标(不编译)

add_library(fftools_src OBJECT ${FFTOOLS_SOURCES})

add_library(avcodec_src OBJECT ${AVCODEC_SOURCES})

add_library(avformat_src OBJECT ${AVFORMAT_SOURCES})

add_library(avutil_src OBJECT ${AVUTIL_SOURCES})

add_library(avfilter_src OBJECT ${AVFILTER_SOURCES})

add_library(avdevice_src OBJECT ${AVDEVICE_SOURCES})

add_library(swscale_src OBJECT ${SWSCALE_SOURCES})

add_library(swresample_src OBJECT ${SWRESAMPLE_SOURCES})

排除这些目标的实际构建

set_target_properties(

fftools_src avcodec_src avformat_src avutil_src

avfilter_src avdevice_src swscale_src swresample_src

PROPERTIES

EXCLUDE_FROM_ALL TRUE

)

message(STATUS "")
message(STATUS "FFmpeg Debug Configuration (Hybrid Mode)")
message(STATUS "")

message(STATUS "Using pre-compiled .o files from 'make' build")

message(STATUS "This avoids GCC/macOS compatibility issues")

message(STATUS "")

message(STATUS "To rebuild with debug symbols, run:")

message(STATUS " make clean")

message(STATUS " ./configure --enable-debug=3 --disable-optimizations")

message(STATUS " make -j8")

message(STATUS "")

message(STATUS "Note: GCC 14 on macOS has fixincludes issues with system headers.")

message(STATUS "The hybrid approach (make + CMake) works around this problem.")

message(STATUS "==================================================================")

相关推荐
sean9088 小时前
Colima 下 docker pull 失败自查流程
macos·docker·容器·colima
简鹿视频1 天前
视频转mp4格式具体作步骤
ffmpeg·php·音视频·实时音视频
denggun123451 天前
卡顿监测原理
macos·ios·xcode
Sheffi661 天前
iOS 触摸事件完整传递链路:Hit-Test 全流程深度解析
macos·ios·cocoa
ChineHe1 天前
Gin框架入门篇002_第一个Gin服务
macos·xcode·gin
一点晖光1 天前
centos安装ffmpeg环境
linux·ffmpeg·centos
Roc.Chang1 天前
解决 macOS 26.1 The application “xxxx” can’t be opened. 问题
macos
赶路人儿1 天前
从intel mac迁移到M3后软件的兼容性
macos