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

相关推荐
于慨1 小时前
firecrawl
macos
vooy pktc3 小时前
macOS安装Redis
数据库·redis·macos
A懿轩A3 小时前
Ghostty:告别 Mac 毛坯终端,打造 2026 最丝滑的 Ghostty AI 开发驾驶舱——Claude Code 团队也在用
python·macos·策略模式
空中海4 小时前
01. iOS 逆向基础、环境搭建与授权
macos·ios·cocoa
空中海5 小时前
iOS LLDB 调试、Mach-O、Runtime 与二进制分析
macos·ios·cocoa
空中海5 小时前
iOS 防护、加固复测与综合交付
macos·ios·cocoa
生而为虫1 天前
Claude Code 最新版安装教程(Windows/Mac/Linux 全平台) 面向普通用户的 Claude Code 安装与模型接入指南
linux·windows·macos
李老师的Java笔记1 天前
如何解决Mac升级完nodejs没有生效的问题?
macos
开开心心_Every1 天前
轻量级PDF阅读器,仅几M大小打开秒开
linux·运维·服务器·安全·macos·pdf·phpstorm
Chengbei111 天前
轻量化 Web 安全日志分析神器 星川智盾日志威胁检测、地理溯源、MITRE ATT&CK 映射,支持 Windows/macOS/Linux
前端·人工智能·安全·web安全·macos·系统安全·安全架构