自用的测试文件夹内容整理
生活随笔
收集整理的這篇文章主要介紹了
自用的测试文件夹内容整理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 文件夾目錄結構
- makefile
- 編譯腳本
- linux_x86
- Android_arm
文件夾目錄結構
mediaTest ├── android //具體平臺對應的文件夾 │ ├── arm64 │ │ ├── include │ │ ├── jni │ │ │ ├── Android.mk │ │ │ ├── Application.mk │ │ │ └── compile_android_r16b_x64.sh │ │ └── media_libs │ └── arm │ ├── include │ ├── jni │ │ ├── Android.mk │ │ ├── Application.mk │ │ ├── compile_android_r16b_x86.sh │ │ └── readme │ ├── media_libs │ └── ndk_build ├── linux │ ├── x64 │ │ ├── bin │ │ ├── include │ │ └── media_libs │ └── x86 │ ├── bin │ ├── include │ └── media_libs ├── compile_android_x86.sh ├── compile_linux_x64.sh ├── compile_linux_x86.sh ├── makefile ├── media_files //使用到的數據文件 │ ├── g7221c │ ├── g722_240 │ ├── g728 │ ├── g728_240 │ ├── red_opus_127 │ ├── test_mpeg.mp4 │ └── wo.h264 ├── readme.todo └── source└── MediaDeadlockCheck.cppmakefile
# Rules for all Makefiles # 作者: yjj # 日期: 2021/01/07 # # 使用前必須傳入以下參數 # ARCHNAME 編譯平臺 # DEMO_DIR 存放生成得執行文件得目錄 # MEDIA_FILES_DIR 代碼中使用到文件存放目錄.PHONY: init clean show check demo install .PHONY: test1 test2 test3 test4TOP := $(shell pwd) INC_BASE_PATH = $(TOP)/$(PLATFORM)/$(ARCHNAME)/include LNK_BASE_PATH = $(TOP)/$(PLATFORM)/$(ARCHNAME)/media_libs DEMO_DIR = $(TOP)/$(PLATFORM)/$(ARCHNAME)/$(DEMODIR) MEDIA_FILES_DIR = $(TOP)/$(MEDIAFILESDIR) SRC_FILES_PATH = $(TOP)/source#不同平臺得參數配置 ifeq ($(PLATFORM),linux) ifeq ($(ARCHNAME),x86) CXXCOMPILER := g++ DEMONAME := MediaDeadlockCheck PLATFORM_ARCH_SPECIAL := -m32 PLATFORM_ARCH_SPECIAL_LD := -m32CXXDEF := -D_LINUX_ $(DEFINE_LIST) CXXFLAG := -g -frtti -fexceptions -Wall -Wno-strict-aliasing -fPIE -pie #-L指定鏈接庫的搜索路徑 -l 指定搜索鏈接庫的名稱 不指定-static默認使用動態鏈接 CXXLDFLAG := -L$(LNK_BASE_PATH) -fPIE -pie LINKLIBS := -ldl -lpthread EXTRAFLAG :=#頭文件搜索路徑 INCFLAG := -I$(INC_BASE_PATH) endififeq ($(ARCHNAME),x64) CXXCOMPILER := g++ DEMONAME := MediaDeadlockCheck PLATFORM_ARCH_SPECIAL := -m64 PLATFORM_ARCH_SPECIAL_LD := -m64CXXDEF := -D_LINUX_ $(DEFINE_LIST) CXXFLAG := -g -frtti -fexceptions -Wall -Wno-strict-aliasing -fPIE -pie #-L指定鏈接庫的搜索路徑 -l 指定搜索鏈接庫的名稱 不指定-static默認使用動態鏈接 CXXLDFLAG := -L$(LNK_BASE_PATH) -fPIE -pie LINKLIBS := -ldl -lpthread EXTRAFLAG :=#頭文件搜索路徑 INCFLAG := -I$(INC_BASE_PATH) endif endififeq ($(PLATFORM),android) ifeq ($(ARCHNAME),x86) CXXCOMPILER := arm-linux-androideabi-g++ ANDROID_NDK_ROOT := $(ANDROID_NDK_ROOT_R16) DEMONAME := MediaDeadlockCheck PLATFORM_ARCH_SPECIAL := --sysroot=$(ANDROID_NDK_ROOT)/sysroot -isystem $(ANDROID_NDK_ROOT)/sysroot/usr/include/arm-linux-androideabi -I$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/include/ -I$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++abi/include -I$(ANDROID_NDK_ROOT)/sources/android/support/include -pie -fPIEPLATFORM_ARCH_SPECIAL_LD := --sysroot=$(ANDROID_NDK_ROOT)/platforms/android-14/arch-arm -L$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a -lc++_shared -pie -fPIECXXDEF := -D_LINUX_ -D_ANDROID_ -D__ANDROID_API__=14 CXXFLAG := -g -frtti -fexceptions -Wall -Wno-strict-aliasing CXXLDFLAG := -L$(LNK_BASE_PATH) LINKLIBS := -ldl EXTRAFLAG :=INCFLAG := -I$(INC_BASE_PATH)endif endif#$(foreach <var>,<list>,<text>) #這個函數的意思是,把參數<list>;中的單詞逐一取出放到參數<var>;所指定的變量中,然后再執行< text>;所包含的表達式。每一次<text>;會返回一個字符串,循環過程中,<text>;的所返回的每個字符串會以空格分隔,最后當整個循環結束時,<text>;所返回的每個字符串所組成的整個字符串(以空格分隔)將會是foreach函數的返回值。 CXXFILES = $(foreach dir,$(SRC_FILES_PATH),$(wildcard $(dir)/*.cpp))#替換文件后綴 ,也可以寫成 OBJS = $(FILES:%.cpp=%.o) OBJS_FILES := $(patsubst %.cpp,%.o, $(CXXFILES)) #替換OBJS_FILES前面的路徑 為實際存放.o得路徑 OUTPUT_OBJS_DIR = $(DEMO_DIR)/obj OBJS_FILES := $(foreach files, $(OBJS_FILES), $(subst $(SRC_FILES_PATH), $(OUTPUT_OBJS_DIR), $(files)))show:@#make會打印每條命令,然后再執行,這就叫做回聲(echoing)@#在命令的前面加上@,就可以關閉回聲@echo "=============== $(ARCHNAME) show start==============="@echo INC_BASE_PATH : $(INC_BASE_PATH)@echo LNK_BASE_PATH : $(LNK_BASE_PATH)@echo CXXCOMPILER : $(CXXCOMPILER)@echo DEMO_DIR : $(DEMO_DIR)@echo PLATFORM_ARCH_SPECIAL : $(PLATFORM_ARCH_SPECIAL)@echo PLATFORM_ARCH_SPECIAL_LD : $(PLATFORM_ARCH_SPECIAL_LD)@echo CXXDEF : $(CXXDEF)@echo CXXFLAG : $(CXXFLAG)@echo CXXLDFLAG : $(CXXLDFLAG)@echo LINKLIBS : $(LINKLIBS)@echo EXTRAFLAG : $(EXTRAFLAG)@echo INCFLAG : $(INCFLAG)@echo "=============== $(ARCHNAME) show end ==============="#拆解編譯過程到.o為止,然后統一鏈接 #g++ hello.cpp -o test #1.預處理 #g++ -E hello.cpp -o hello.i #2.編譯 #g++ -S hello.i -o hello.s #3.匯編 #g++ -c hello.s -o hello.o #4.鏈接 #g++ hello.o -o hello#可以考慮在之后添加靜態庫和動態庫的生成#Make命令允許對文件名,進行類似正則運算的匹配,主要用到的匹配符是%。比如,假定當前目錄下有 f1.c 和 f2.c 兩個源碼文件,需要將它們編譯為對應的對象文件。 #%.o: %.c #等同于下面的寫法。 #f1.o: f1.c #f2.o: f2.c #使用匹配符%,可以將大量同類型的文件,只用一條規則就完成構建。 $(OUTPUT_OBJS_DIR)/%.o: $(SRC_FILES_PATH)/%.cpp@echo "小夫我要進來了!"$(CXXCOMPILER) $(CXXDEF) $(PLATFORM_ARCH_SPECIAL) $(CXXFLAG) $(EXTRAFLAG) $(INCFLAG) -c -o $@ $<demo: $(OBJS_FILES)$(CXXCOMPILER) $(PLATFORM_ARCH_SPECIAL_LD) $(CXXLDFLAG) $(LINKLIBS) $(OBJS_FILES) -o $(DEMONAME)clean:@rm -rf $(DEMO_DIR)check:@if [ -z "${CXXCOMPILER}" ]; then echo "please set CXXCOMPILER "; exit 1; fiinit:@if [ ! -d "$(DEMO_DIR)" ]; then mkdir $(DEMO_DIR); fi@if [ ! -d "$(OUTPUT_OBJS_DIR)" ]; then mkdir $(OUTPUT_OBJS_DIR); fiinstall: check show clean init demo@cp $(LNK_BASE_PATH)/*.so $(DEMO_DIR)/@mv $(DEMONAME) $(DEMO_DIR)/@cp $(MEDIA_FILES_DIR)/* $(DEMO_DIR)/test1:@echo "放你媽屁,RNG會3:0 ?" test2:@echo "我不知道,我是豬!" test3: test1 test2@echo $<@echo $@@echo $?@echo $^ test4: @echo $(CXXFILES)@echo $(OBJS_FILES)編譯腳本
linux_x86
compile_linux_x86.sh
#! /bin/sh function compile_help() {echo "Usage: $0"echo " $0 [options] [args]"echo " "echo "Options:"echo " "echo " -d 要傳入的預編譯宏"echo " 當前支持如下預編譯宏:USE_127 TEST_EnableCrypt"} function define_join() {cmd_list=`echo $* | sed -nr 's/-d //p'`for arg in $cmd_listdoecho "外部傳入參數:"$argdefine_list=$define_list"-D"$arg" "doneecho "預編譯宏拼接:"$define_list }if [ "$1" == "-h" ]; thencompile_helpexit 0 elif [ "$1" == "-d" ]; thendefine_join $* elseecho "nothing to do before make !" fimake DEFINE_LIST="$define_list" PLATFORM=linux ARCHNAME=x86 DEMODIR=bin MEDIAFILESDIR=media_files -f makefile installAndroid_arm
Android不采用makefile編譯,使用jni,當然你也可以試試makefile,我的makefile里有Android的選項你可以參照linux_x86的編譯腳本來改一下,但是它只支持r16b。Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)#export LD_LIBRARY_PATH=./ LOCAL_MODULE:= MediaDeadlockCheckMY_PROC_BASE_PATH := $(LOCAL_PATH)/../../.. LIB_PATH := $(MY_PROC_BASE_PATH)/android/x86/media_libs LINK_LIB_PATH := -L$(LIB_PATH)LOCAL_C_INCLUDES := $(MY_PROC_BASE_PATH)/android/x86/include SRC_FILES_PATH := $(MY_PROC_BASE_PATH)/source LOCAL_SRC_FILES := $(foreach dir,$(SRC_FILES_PATH),$(wildcard $(dir)/*.cpp))LOCAL_CFLAGS += -D_LINUX_ -D_ANDROID_ -pie -fPIE LOCAL_CFLAGS += -fvisibility=hidden -Wall -Wstrict-prototypes LOCAL_LDFLAGS += $(LINK_LIB_PATH) LOCAL_LDLIBS += -lz -ldl -pie -fPIE LOCAL_SHARED_LIBRARIES := LOCAL_PRELINK_MODULE:= falseinclude $(BUILD_EXECUTABLE)Application.mk
# it is needed for ndk-r5APP_STL := c++_shared #APP_STL := gnustl_sharedAPP_CPPFLAGS := -frttiAPP_MODULES += MediaDeadlockCheckAPP_ABI := armeabi-v7aAPP_PLATFORM := android-14compile_android_r16b_x86.sh
DEMO_DIR="../ndk_build" LNK_BASE_PATH="../media_libs" MEDIA_FILES_DIR="../../../media_files"if [ ! -d "$DEMO_DIR" ]; thenmkdir $DEMO_DIR elserm -rf $DEMO_DIR fiecho "Android R16b x86 build start" $ANDROID_NDK_ROOT_R16/ndk-build V=1 B=1 NDK_DEBUG=1 NDK_LIBS_OUT=$DEMO_DIR NDK_OUT=$DEMO_DIRif [ $? != 0 ]; thenecho "Android R16b x86 build fail"exit 1 elseecho "Android R16b x86 build success"cp $LNK_BASE_PATH/*.so $DEMO_DIR/armeabi-v7acp $MEDIA_FILES_DIR/* $DEMO_DIR/armeabi-v7a fireadme
1.export ANDROID_NDK_ROOT_R16=/opt/android-ndk-r16b 2.usage: make_standalone_toolchain.py [-h] --arch{arm,arm64,mips,mips64,x86,x86_64}[--api API][--stl {gnustl,libc++,stlport}] [--force][-v][--package-dir PACKAGE_DIR | --install-dir INSTALL_DIR] build standalone tools built by ${ANDROID_NDK_ROOT_R16}/build/tools/make_standalone_toolchain.py --arch arm64 --api 21 --stl libc++ --force --install-dir /opt/myndk/standalone/android-ndk-r16b-arm總結
以上是生活随笔為你收集整理的自用的测试文件夹内容整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦幻西游服务器显示不出来了,梦幻西游买到
- 下一篇: python语音验证码识别_python