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 "==================================================================")

相关推荐
甘晴void1 小时前
我给 Magpie 做了个 macOS 桌宠:106 段动画,请求一多就亮灯
macos·electron·开源·deepseek·桌面宠物·magpie
donecoding2 小时前
Apple 芯片 Mac 的终端为什么还在跑 Intel?从 tmux 查起
macos
DevLoom_7 小时前
macOS 27 升级后 Time Capsule 无法备份?AFP 协议废弃后的完整解决方案与备份迁移教程
macos·时间机器·macos27·macos 27备份·macos实用技巧
金海星科技7 小时前
船舶交通管理中心的人工智能值守:从“听、说、读、写“看人机协同
人工智能·macos·xcode
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮10 小时前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Hommy8810 小时前
【直播切片工作台】第23章:媒体探测与转码:ffprobe 与 ffmpeg 封装
人工智能·ffmpeg·直播切片
小相会自律10 小时前
全平台远程控制软件推荐2026:Win/Mac/Linux/手机/鸿蒙互通哪款好
linux·macos·智能手机·todesk·teamviewer·向日葵
码匠许师傅11 小时前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
IsITGirl11 小时前
VMware Fusion(Mac)Windows ARM 虚拟机 NAT (vmnet8) 报错解决记录
windows·macos·.net·桥接模式