cpm-cmake / CPM.cmake

📦 CMake's missing package manager. A small CMake script for setup-free, cross-platform, reproducible dependency management.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

How can I build FFmpeg using CPM?

savitara opened this issue · comments

I have tried to build it, but without success. It's too difficult.

You can refer to my code.

https://gitee.com/ls56647426/qlpmsp/blob/master/code/dev_base/av_player/CMakeLists.txt

  • CMakeLists.txt
include(cmake/ffmpeg.cmake)

target_link_libraries(${PROJECT_NAME} PUBLIC ${FFMPEG_LIBRARYS} ...)
  • ffmpeg.cmake
# ffmpeg.cmake
include(ExternalProject)

CPMAddPackage(
    NAME ffmpeg
    GIT_REPOSITORY https://gitee.com/ls56647426/ffmpeg.git
    GIT_TAG n4.4
    DOWNLOAD_ONLY YES
)

macro(add_ffmpeg_library target)
    add_library(${target} SHARED IMPORTED)
    if(NOT TARGET ${target})
        message("not target ${target}.")
    endif()
    set_target_properties(${target} PROPERTIES
        IMPORTED_LOCATION_RELEASE ${ffmpeg_SOURCE_DIR}/build/lib/lib${target}.so
        IMPORTED_LOCATION_DEBUG ${ffmpeg_SOURCE_DIR}/build/lib/lib${target}.so
        IMPORTED_IMPLIB_RELEASE ${ffmpeg_SOURCE_DIR}/build/lib/lib${target}.so
        IMPORTED_IMPLIB_DEBUG ${ffmpeg_SOURCE_DIR}/build/lib/lib${target}.so
    )
    execute_process(COMMAND rm -rf
        ${LIBRARY_OUTPUT_PATH}/lib${target}.so
    )
    execute_process(COMMAND ln -s
        ${ffmpeg_SOURCE_DIR}/build/lib/lib${target}.so
        ${LIBRARY_OUTPUT_PATH}/lib${target}.so
    )
endmacro()

# ffmpeg has no CMakeLists, so we create our own target
if(ffmpeg_ADDED)
    if (WIN32)
        # TODO: qt 命令行不支持 ./configure 命令,无法通过正常手段编译这个仓库
        # 考虑准备好 windows 环境依赖库 dll,下载后直接链接
    elseif (APPLE)
    elseif (UNIX)
        ExternalProject_Add(ffmpeg
            SOURCE_DIR ${ffmpeg_SOURCE_DIR}
            LOG_DIR ${ffmpeg_SOURCE_DIR}/log
            BINARY_DIR ${ffmpeg_SOURCE_DIR}/build
            CONFIGURE_COMMAND cd ${ffmpeg_SOURCE_DIR} && ./configure
                --enable-shared
                --prefix=${ffmpeg_SOURCE_DIR}/build
                --disable-x86asm
                --enable-pic
            BUILD_COMMAND cd ${ffmpeg_SOURCE_DIR} && make -j4
            INSTALL_COMMAND cd ${ffmpeg_SOURCE_DIR} && make install
        )
    endif()

    set(FFMPEG_LIBRARYS avcodec avdevice avfilter avformat avutil swresample swscale)

    foreach(library ${FFMPEG_LIBRARYS})
        add_ffmpeg_library(${library})
    endforeach()
endif()