首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >makefile的多个额外的cflag

makefile的多个额外的cflag
EN

Stack Overflow用户
提问于 2020-10-24 21:52:54
回答 1查看 253关注 0票数 0

所以有这样一个库,我正在尝试使用ffmpeg.js,并且我在自定义Makefile。我已经做了我想做的所有事情,但是在构建时,我得到了错误ERROR: opus not found using pkg-config。现在我有两个问题:

--extra-cflags="-s USE_ZLIB=1 -I../lame/dist/include -I../libvpx/dist/include"这个配置最初是--extra-cflags="-s USE_ZLIB=1 -I../lame/dist/include"的,但我想包括两个文件夹,所以合并是正确的还是这就是我出错的地方。

完整的Makefile如下所示(从存储库中的原始Makefile有很多更改),是不是我做错了什么?

代码语言:javascript
复制
PRE_JS = build/pre.js
POST_JS_SYNC = build/post-sync.js

COMMON_FILTERS = aresample scale crop overlay hstack vstack
COMMON_DEMUXERS = matroska ogg mov mp3 wav image2 concat
COMMON_DECODERS = vp8 vp9 h264 vorbis opus mp3 aac pcm_s16le mjpeg png

COMMON_BSFS = vp9_superframe

MUXERS = mp4 mp3 webm ogg null
ENCODERS = libx264 libmp3lame aac libvpx_vp8 libopus
FFMPEG_BC = build/ffmpeg/ffmpeg.bc
FFMPEG_PC_PATH = ../x264/dist/lib/pkgconfig
SHARED_DEPS = \
    build/lame/dist/lib/libmp3lame.so \
    build/x264/dist/lib/libx264.so \
    build/opus/dist/lib/libopus.so \
    build/libvpx/dist/lib/libvpx.so

all: ffmpeg.js

clean: clean-js \
    clean-opus clean-libvpx clean-lame \
    clean-x264 clean-ffmpeg
clean-js:
    rm -f ffmpeg*.js
clean-opus:
    cd build/opus && git clean -xdf
clean-libvpx:
    cd build/libvpx && git clean -xdf
clean-lame:
    cd build/lame && git clean -xdf
clean-x264:
    cd build/x264 && git clean -xdf
clean-ffmpeg:
    cd build/ffmpeg-mp4 && git clean -xdf

build/opus/configure:
    cd build/opus && ./autogen.sh

build/opus/dist/lib/libopus.so: build/opus/configure
    cd build/opus && \
    emconfigure ./configure \
        CFLAGS=-O3 \
        --prefix="$$(pwd)/dist" \
        --disable-static \
        --disable-doc \
        --disable-extra-programs \
        --disable-asm \
        --disable-rtcd \
        --disable-intrinsics \
        --disable-hardening \
        --disable-stack-protector \
        && \
    emmake make -j && \
    emmake make install

build/libvpx/dist/lib/libvpx.so:
    cd build/libvpx && \
    git reset --hard && \
    patch -p1 < ../libvpx-fix-ld.patch && \
    emconfigure ./configure \
        --prefix="$$(pwd)/dist" \
        --target=generic-gnu \
        --disable-dependency-tracking \
        --disable-multithread \
        --disable-runtime-cpu-detect \
        --enable-shared \
        --disable-static \
        \
        --disable-examples \
        --disable-docs \
        --disable-unit-tests \
        --disable-webm-io \
        --disable-libyuv \
        --disable-vp8-decoder \
        --disable-vp9 \
        && \
    emmake make -j && \
    emmake make install

build/lame/dist/lib/libmp3lame.so:
    cd build/lame/lame && \
    git reset --hard && \
    patch -p2 < ../../lame-fix-ld.patch && \
    emconfigure ./configure \
        CFLAGS="-DNDEBUG -O3" \
        --prefix="$$(pwd)/../dist" \
        --host=x86-none-linux \
        --disable-static \
        \
        --disable-gtktest \
        --disable-analyzer-hooks \
        --disable-decoder \
        --disable-frontend \
        && \
    emmake make -j && \
    emmake make install

build/x264/dist/lib/libx264.so:
    cd build/x264 && \
    emconfigure ./configure \
        --prefix="$$(pwd)/dist" \
        --extra-cflags="-Wno-unknown-warning-option" \
        --host=x86-none-linux \
        --disable-cli \
        --enable-shared \
        --disable-opencl \
        --disable-thread \
        --disable-interlaced \
        --bit-depth=8 \
        --chroma-format=420 \
        --disable-asm \
        \
        --disable-avs \
        --disable-swscale \
        --disable-lavf \
        --disable-ffms \
        --disable-gpac \
        --disable-lsmash \
        && \
    emmake make -j && \
    emmake make install

FFMPEG_COMMON_ARGS = \
    --cc=emcc \
    --ranlib=emranlib \
    --enable-cross-compile \
    --target-os=none \
    --arch=x86 \
    --disable-runtime-cpudetect \
    --disable-asm \
    --disable-fast-unaligned \
    --disable-pthreads \
    --disable-w32threads \
    --disable-os2threads \
    --disable-debug \
    --disable-stripping \
    --disable-safe-bitstream-reader \
    \
    --disable-all \
    --enable-ffmpeg \
    --enable-avcodec \
    --enable-avformat \
    --enable-avfilter \
    --enable-swresample \
    --enable-swscale \
    --disable-network \
    --disable-d3d11va \
    --disable-dxva2 \
    --disable-vaapi \
    --disable-vdpau \
    $(addprefix --enable-bsf=,$(COMMON_BSFS)) \
    $(addprefix --enable-decoder=,$(COMMON_DECODERS)) \
    $(addprefix --enable-demuxer=,$(COMMON_DEMUXERS)) \
    --enable-protocol=file \
    $(addprefix --enable-filter=,$(COMMON_FILTERS)) \
    --disable-bzlib \
    --disable-iconv \
    --disable-libxcb \
    --disable-lzma \
    --disable-sdl2 \
    --disable-securetransport \
    --disable-xlib \
    --enable-zlib

build/ffmpeg/ffmpeg.bc: $(SHARED_DEPS)
    cd build/ffmpeg-mp4 && \
    EM_PKG_CONFIG_PATH=$(FFMPEG_PC_PATH) emconfigure ./configure \
        $(FFMPEG_COMMON_ARGS) \
        $(addprefix --enable-encoder=,$(ENCODERS)) \
        $(addprefix --enable-muxer=,$(MUXERS)) \
        --enable-gpl \
        --enable-libmp3lame \
        --enable-libx264 \
        --enable-libopus \
        --enable-libvpx \
        --extra-cflags="-s USE_ZLIB=1 -I../lame/dist/include -I../libvpx/dist/include" \
        --extra-ldflags="-L../lame/dist/lib -L../libvpx/dist/lib" \
        && \
    emmake make -j && \
    cp ffmpeg ffmpeg.bc

EMCC_COMMON_ARGS = \
    -O3 \
    --closure 1 \
    --memory-init-file 0 \
    -s WASM=0 \
    -s WASM_ASYNC_COMPILATION=0 \
    -s ASSERTIONS=0 \
    -s EXIT_RUNTIME=1 \
    -s NODEJS_CATCH_EXIT=0 \
    -s NODEJS_CATCH_REJECTION=0 \
    -s TOTAL_MEMORY=67108864 \
    -lnodefs.js -lworkerfs.js \
    --pre-js $(PRE_JS) \
    -o $@

ffmpeg.js: $(FFMPEG_BC) $(PRE_JS) $(POST_JS_SYNC)
    emcc $(FFMPEG_BC) $(SHARED_DEPS) \
        --post-js $(POST_JS_SYNC) \
        $(EMCC_COMMON_ARGS) -O2

我试图实现的是将一些webm编码器和多路复用器组合到mp4模块中,以便我对所有webm和mp4格式类型只使用一个模块。

还有一件事要了解我,整个Makefile和C语言,构建它对我来说是一个全新的领域,我只是做了我认为正确的事情,提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-10-24 22:09:02

你有坚实的目标是件好事。没有这些,问题就更难解决了。

您需要做的是了解在没有make或Makefiles的情况下为实现这些目标而运行的命令,以及在此过程中创建的文件。这样,您就可以将这些命令编码为

代码语言:javascript
复制
file_to_be_created:source_file_1 source_file_2 source_file_3
<tab>command to be executed
<tab>second command to be executed

这些标签是make历史上错误选择的一个不幸的副作用。

这样,您就可以修改Makefile了。如果您有一个从其他来源构建的源代码,使用上面的模式创建两个" make“规则,make将正确地确定构建顺序并运行所需的命令。如果make确定创建的文件比其源文件新,它将跳过构建创建的文件。

正如您所看到的,尽管make并不是很复杂,但它几乎不能帮助您了解必须运行的命令。也许你已经知道它们了;但是,如果你不知道,我会把你的个人知识和你能从Makefile中读出的东西结合起来,看看你是否能设计出你需要的make文件规则。

最初,我会通过创建新规则和新文件来做到这一点,因为如果您违反了所需的规则,很可能要到很久以后才会知道。一旦你建立了一些东西,你就可以检查你是否应该将你的规则应用到一些现有的规则中。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64514061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档