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

相关推荐
小石潭记丶6 小时前
本地mac创建秘钥,然后远程登录Linux服务器
linux·服务器·macos
luoyayun3616 小时前
Qt + FFmpeg 音频工具:重采样实现
qt·ffmpeg·重采样
小呀小叮当~10 小时前
OpenAI Codex 桌面版(Windows / macOS)体验分享:AI 编程效率再次提升
人工智能·windows·macos
myenjoy_110 小时前
I2S 音频与数字音频接口详解
macos·音视频·xcode
星野爱8951 天前
崩坏星穹铁道4.4版本即将前瞻!Mac畅玩PC端开荒新版本
macos
funnycoffee1231 天前
lacp报文占多少字节?报文的目的mac
网络·网络协议·macos
薄荷椰果抹茶1 天前
计算机导论_第6章_笔记
笔记·ffmpeg
itwangyang5201 天前
Claude Code macOS 安装完整指南:Homebrew、原生脚本与常见问题解决
macos
FlightYe2 天前
FFmpeg移动端硬解机制
linux·网络·ffmpeg·音视频·实时音视频·视频编解码
汤姆yu2 天前
macOS系统下Aider完整安装、配置与实战使用教程
大数据·人工智能·算法·macos·github·copilot