patsubst需要一个编译多个c文件的makefile

patsubst  时间:2021-06-13  阅读:()

1、针对习题6.6中的源文件,编写makefile文件,并执行make命令生成可执行程序,要求如下:

1~5需求的makefile,使用时注意把网页的缩进修改为tab SRCS:=$(wildcard *.c) OBJS:=$(patsubst %.c,%.o, $(SRCS)) EXEC:=hello_world debugflag:= CC:= all:$(EXEC) @echo "build $(EXEC) essful!" $(EXEC):$(OBJS) $(CC) $(debugflag) -o $@ $< .PHONY: clean clean: @-rm -f $(EXEC) *.o 需求6不是很理解,能否说详细点。

如何用Android NDK编译FFmpeg

Android内置的编解码器实在太少,于是我们需要FFmpeg。

Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便。

不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr。

我觉得我现在这些方法算是比较简洁的了-- 下面就尽量详细的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能力,有不明白的就问我。

你得了解JNI和Android NDK的基本用法,若觉得我的文章还不错,可以看之前写的JNI简单入门和Android NDK入门 首先创建一个标准的Android项目vPlayer android create project -n vPlayer -t 8 -p vPlayer -k me.abitno.vplayer -a PlayerView 然后在vPlayer目录里 mkdir jni && cd jni wget /releases/ffmpeg-0.6.tar.bz2 tar xf ffmpeg-0.6.tar.bz2 && mv ffmpeg-0.6 ffmpeg && cd ffmpeg 在ffmpeg下新建一个config.sh,内容如下,注意把PREBUILT和PLATFORM设置正确。

另外里面有些参数你也可以自行调整,我主要是为了配置一个播放器而这样设置的。

#!/bin/bash PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0 PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm ./configure --target-os=linux --arch=arm --enable-version3 --enable-gpl --enable-nonfree --disable-stripping --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-encoders --disable-muxers --disable-devices --disable-protocols --enable-protocol=file --enable-avfilter work --disable-mpegaudio-hp --disable-avdevice pile =$PREBUILT/bin/ --cross-prefix=$PREBUILT/bin/arm-eabi- --nm=$PREBUILT/bin/arm-eabi-nm --extra-cflags="-fPIC -DANDROID" --disable-asm --enable-neon --enable-armv5te --extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib//arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib//arm-eabi/4.4.0/crtend.o -lc -lm -ldl" 运行config.sh开始configure chmod +x config.sh ./config.sh configure完成后,编辑刚刚生成的config.h,找到这句 #define restrict restrict Android的GCC不支持restrict关键字,于是修改成下面这样 #define restrict 编辑libavutil/libm.h,把其中的static方法都删除。

分别修改libavcodec、libavfilter、libavformat、libavutil、libpostproc和libswscale下的Makefile,把下面两句删除 include $(SUBDIR)../subdir.mak include $(SUBDIR)../config.mak 在ffmpeg下添加一个文件av.mk,内容如下 # LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale #include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak include $(LOCAL_PATH)/../config.mak OBJS := OBJS-yes := MMX-OBJS-yes := include $(LOCAL_PATH)/Makefile # collect objects OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes) OBJS += $(OBJS-yes) FFNAME := lib$(NAME) FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME)) FFCFLAGS = -DHAVE_AV_CONFIG_H pare -Wno-switch -Wno-pointer-sign FFCFLAGS += -DTARGET_CONFIG="config-$(TARGET_ARCH).h" ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S) ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES))) ifneq ($(ALL_S_FILES),) ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES)) C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS)) S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS)) else C_OBJS := $(OBJS) S_OBJS := endif C_FILES := $(patsubst %.o,%.c,$(C_OBJS)) S_FILES := $(patsubst %.o,%.S,$(S_OBJS)) FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES)) 接下来要添加一系列的Android.mk,在jni根目录下的内容如下 include $(all-subdir-makefiles) 在ffmpeg目录下,Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale LOCAL_MODULE := ffmpeg include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) libavformat/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) include $(LOCAL_PATH)/../av.mk LOCAL_SRC_FILES := $(FFFILES) LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/.. LOCAL_CFLAGS += $(FFCFLAGS) LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex LOCAL_LDLIBS := -lz LOCAL_STATIC_LIBRARIES := $(FFLIBS) LOCAL_MODULE := $(FFNAME) include $(BUILD_STATIC_LIBRARY) libavcodec/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) include $(LOCAL_PATH)/../av.mk LOCAL_SRC_FILES := $(FFFILES) LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/.. LOCAL_CFLAGS += $(FFCFLAGS) LOCAL_LDLIBS := -lz LOCAL_STATIC_LIBRARIES := $(FFLIBS) LOCAL_MODULE := $(FFNAME) include $(BUILD_STATIC_LIBRARY) libavfilter、libavutil、libpostproc和libswscale下的Android.mk内容如下 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) include $(LOCAL_PATH)/../av.mk LOCAL_SRC_FILES := $(FFFILES) LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/.. LOCAL_CFLAGS += $(FFCFLAGS) LOCAL_STATIC_LIBRARIES := $(FFLIBS) LOCAL_MODULE := $(FFNAME) include $(BUILD_STATIC_LIBRARY) 最外层的jni/Android.mk和jni/ffmpeg/Android.mk我只是随便这样写的,你应该根据自己的需求改写。

最后运行ndk-build,经过漫长的等待就编译完成了。

至于具体怎么应用可能以后会写,我变得太懒了。





转载,仅供参考,祝你愉快,满意请采纳。

需要一个编译多个c文件的makefile

# $Id: Makefile,v 2.0 2008/10/08 18:55:40 Update $ prog_name = TEST #目标文件名 ###################################### # # Generic makefile # # by Jackie Xie # email: jackie.CPlusPlus@ # # Copyright (c) 2008 Jackie Xie # All rights reserved. # # No warranty, no liability; # you use this at your own risk. # # You are free to modify and # distribute this without giving # credit to the original author. # ###################################### ### Customising # # Adjust the following if necessary; EXECUTABLE is the target # executable"s filename, and LIBS is a list of libraries to link in # (e.g. alleg, stdcx, iostr, etc). You can override these on make"s #mand line of course, if you prefer to do it that way. # EXECUTABLE := $(prog_name) LIBS := #库文件 没有可不写 # Now alter any implicit rules" variables if you like, e.g.: # CFLAGS := -g -Wall -O CXXFLAGS := $(CFLAGS) CC := #编译器 # The next bit checks to see whether rm is in your djgpp bin # directory; if not it uses del instead, but this can cause (harmless) # `File not found" error messages. If you are not using DOS at all, # set the variable to something which will unquestioningly remove # files. # ifneq ($(wildcard $(DJDIR)/bin/rm),) RM-F := rm -f else RM-F := del endif # You shouldn"t need to change anything below this point. # # ................... SOURCE := $(wildcard *.cpp) $(wildcard *.c) OBJS := $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCE))) DEPS := $(patsubst %.o,%.d,$(OBJS)) MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS)) MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.cpp,$(MISSING_DEPS)) $(patsubst %.d,%.cpp,$(MISSING_DEPS))) CPPFLAGS += -MD .PHONY : everything deps objs clean veryclean rebuild everything : $(EXECUTABLE) deps : $(DEPS) objs : $(OBJS) clean : @$(RM-F) *.o @$(RM-F) *.d veryclean: clean @$(RM-F) $(EXECUTABLE) @$(RM-F) *.*~ *~ distclean: veryclean rebuild: veryclean everything ifneq ($(MISSING_DEPS),) $(MISSING_DEPS) : @$(RM-F) $(patsubst %.d,%.o,$@) endif -include $(DEPS) $(EXECUTABLE) : $(OBJS) $(CC) -o $(EXECUTABLE) $(OBJS) $(addprefix ,$(LIBS))

复制,保存为makefile 文件即可。

青云互联:洛杉矶CN2弹性云限时七折,Cera机房三网CN2gia回程,13.3元/月起

青云互联怎么样?青云互联是一家成立于2020年6月份的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。目前,美国洛杉矶cn2弹性云限时七折,美国cera机房三网CN2gia回程 13.3元/月起,可选Windows/可自定义配置。点击进入:青云互联官网青云互联优惠码:七折优惠码:dVRKp2tP (续...

ZJI:香港物理服务器,2*E5-2630L/32G/480G SSD/30Mbps/2IP/香港BGP,月付520元

zji怎么样?zji是一家老牌国人主机商家,公司开办在香港,这个平台主要销售独立服务器业务,和hostkvm是同一样,两个平台销售的产品类别不一平,商家的技术非常不错,机器非常稳定。昨天收到商家的优惠推送,目前针对香港邦联四型推出了65折优惠BGP线路服务器,性价比非常不错,有需要香港独立服务器的朋友可以入手,非常适合做站。zji优惠码:月付/年付优惠码:zji 物理服务器/VDS/虚拟主机空间订...

cloudcone:特价便宜VPS补货通知贴,SAS或SSD低价有磁盘阵列,SAS或SSD raid10 硬盘

cloudcone经常性有特价促销VPS放出来,每次的数量都是相当有限的,为了方便、及时帮助大家,主机测评这里就做这个cloudcone特价VPS补货专题吧,以后每次放货我会在这里更新一下日期,方便大家秒杀!官方网站:https://cloudcone.com/预交费模式,需要充值之后方可使用,系统自动扣费!信用卡、PayPal、支付宝,均可付款购买!为什么说cloudcone值得买?cloudc...

patsubst为你推荐
jstz泰州哪里有民工市场腾讯技术腾讯简介----单元测试规范求解,单片机程序的单元测试应该怎么做呢?activitygroup请问在activitygroup中嵌入多个webview,切换时如何保持状态腾讯贴吧腾讯论坛里找自己发的帖移动硬盘文件或目录损坏且无法读取移动硬盘提示文件或目录损坏且无法读取,怎么修复微信网页版怎么看朋友圈电脑版的微信怎么看朋友圈山东省教育云平台服务山东教育云平台怎么这么烂pmp格式PMP的格式第三方支付系统第三方支付平台有哪些
国外永久服务器 hostgator tier 香港cdn 便宜建站 香港机房托管 payoneer cpanel空间 上海域名 权嘉云 圣诞促销 香港新世界中心 云服务器比较 中国域名 酸酸乳 工信部icp备案查询 supercache 阿里云邮箱申请 谷歌搜索打不开 windowsserver2008 更多