【问题标题】:CMAKE ExternalProject_Add add unwanted double quoteCMAKE ExternalProject_Add 添加不需要的双引号
【发布时间】:2021-01-08 21:29:26
【问题描述】:

我有一个简单的 CMake 项目,它使用 ExternalProject_Add 来配置和编译 ffmpeg。 CMakeLists.txt 如下所示:

cmake_minimum_required(VERSION 3.2)

project(FFMpeg)

include(ExternalProject)

set(PRIVATE_LIBRARY_PATH "home/user/local/lib")
set(PRIVATE_PKG_CONFIG "home/user/local/pkgconfig")

set(FFMPEG_CONFIGURE_COMMAND echo)
if(NOT (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/FFMpeg/config.h))
    set(FFMPEG_CONFIGURE_COMMAND ./configure)
    set(FFMPEG_DEBUG_CONFIGURE_ARGS "--enable-x86asm --disable-doc --extra-libs=-lpthread --extra-libs=-ldl --enable-shared --enable-static --disable-avx512 --disable-optimizations --extra-cflags=-g3 --extra-cflags=-fno-omit-frame-pointer --enable-debug=3 --extra-cflags=-fno-inline --disable-stripping")
endif()

ExternalProject_Add(ffmpeg
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg
        CONFIGURE_COMMAND export LD_LIBRARY_PATH=${PRIVATE_LIBRARY_PATH} PKG_CONFIG_PATH=${PRIVATE_PKG_CONFIG}/usr/lib/pkgconfig && ${FFMPEG_CONFIGURE_COMMAND} ${FFMPEG_DEBUG_CONFIGURE_XMA_ARGS}
        BUILD_COMMAND export LD_LIBRARY_PATH=${PRIVATE_LIBRARY_PATH} PKG_CONFIG_PATH=${PRIVATE_PKG_CONFIG}/usr/lib/pkgconfig && make V=1
        INSTALL_COMMAND make install
        INSTALL_DIR ""
        BUILD_IN_SOURCE 1
        BUILD_ALWAYS 1)

但是当执行 ExternalProject_Add 的 CONFIGURE_COMMAND 时,命令在扩展字符串 FFMPEG_DEBUG_CONFIGURE_ARGS 之间添加双引号,因此 ffmpeg 配置脚本会忽略参数:

./configure "--enable-x86asm --disable-doc --extra-libs=-lpthread --extra-libs=-ldl --enable-shared --enable-static --disable-avx512 --disable-optimizations --extra-cflags=-g3 --extra-cflags=-fno-omit-frame-pointer --enable-debug=3 --extra-cflags=-fno-inline --disable-stripping"

如何更改 CONFIGURE_COMMAND 命令行以删除双引号以允许 FFMpeg 配置脚本正确识别参数?

【问题讨论】:

  • 好吧,用引号可以确保你有一个包含所有命令行参数的 1 个元素的“列表”。由于参数中的空格会导致命令行将其解释为多个参数,因此 CMake 需要插入引号。删除引号,您将得到一个包含 13 个元素的列表,每个元素都包含一个参数。 (通过循环打印列表元素可以清楚地看到这一点:foreach(_TEMP IN LISTS FFMPEG_DEBUG_CONFIGURE_ARGS) message(STATUS "item: ${_TEMP}") endforeach()

标签: ffmpeg cmake


【解决方案1】:

从 CMake set(...) 中删除引号解决了这个问题。我不太明白您不需要将集合的值放在双引号中。因此该集合应该是:

    set(FFMPEG_DEBUG_CONFIGURE_ARGS --enable-x86asm --disable-doc --extra-libs=-lpthread --extra-libs=-ldl --enable-shared --enable-static --disable-avx512 --disable-optimizations --extra-cflags=-g3 --extra-cflags=-fno-omit-frame-pointer --enable-debug=3 --extra-cflags=-fno-inline --disable-stripping)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2021-11-01
    • 2016-02-02
    • 2021-06-25
    相关资源
    最近更新 更多