1*4882a593Smuzhiyun#CC = gcc 2*4882a593SmuzhiyunCROSS = /home/yyz/audio/rk3308/buildroot/output/rockchip_rk3308_pcba_32bit/host/bin/arm-rockchip-linux-gnueabihf- 3*4882a593SmuzhiyunCC = $(CROSS)gcc 4*4882a593SmuzhiyunCXX = $(CROSS)g++ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun#MW_DIR=$(PWD) 7*4882a593SmuzhiyunLIBS += -lpthread 8*4882a593SmuzhiyunMW_DIR=./ 9*4882a593SmuzhiyunTARGET = libmictest.so 10*4882a593SmuzhiyunINCLUDE = -I./ 11*4882a593Smuzhiyun# 12*4882a593SmuzhiyunCFLAGS += -fPIC -DTINA_LINUX -DWITHOUT_ALOG=1 -lpthread -O3 -fno-strict-aliasing -fprefetch-loop-arrays -mfloat-abi=hard -mfpu=neon -marm -march=armv7-a 13*4882a593Smuzhiyun#-mfpu=neon -marm -march=armv7-a 14*4882a593SmuzhiyunCXXFLAGS += -fPIC -DTINA_LINUX -DWITHOUT_ALOG=1 -lpthread -O3 -fno-strict-aliasing -fprefetch-loop-arrays -mfloat-abi=hard -mfpu=neon -marm -march=armv7-a 15*4882a593Smuzhiyun#-mfpu=neon -marm -march=armv7-a 16*4882a593SmuzhiyunLDFLAGS = -fPIC -shared 17*4882a593Smuzhiyun#找到所有编译目录下的头文件-- 18*4882a593SmuzhiyunSAMDIR=$(MW_DIR) 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunSAMINCH=$(shell find $(SAMDIR) -name "*.h*") 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun#找到了,大家可以看到Makefile是可以使用shell命令的,现在结果存储在SAMINCH。 23*4882a593Smuzhiyun 24*4882a593SmuzhiyunTMP_DIR=$(dir $(SAMINCH)) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun#dir是个函数,就是列出SAMINCH目录前缀(/*.h之前的字串)的结果。 27*4882a593Smuzhiyun 28*4882a593SmuzhiyunSAMINCDIR=$(sort $(TMP_DIR)) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun#sort也是个函数,这是为了去除重复的目录名。 31*4882a593Smuzhiyun 32*4882a593SmuzhiyunINCLUDE += $(foreach temp, $(SAMINCDIR), -I$(temp)) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun#只是列出所有匹配的目录结果, 加到-I选项之后,用空格隔开。 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun#好了,轮到源程序了。 38*4882a593Smuzhiyun 39*4882a593SmuzhiyunCPP_FILES=$(shell find $(SAMDIR) -name '*.cpp') 40*4882a593SmuzhiyunC_FILES =$(shell find $(SAMDIR) -name '*.c') 41*4882a593Smuzhiyun 42*4882a593SmuzhiyunOBJCPP=$(CPP_FILES:%.cpp=%.o) 43*4882a593SmuzhiyunOBJC =$(C_FILES:%.c=%.o) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun#建立规则 46*4882a593Smuzhiyun#$(warning objcpp is $(OBJCPP) objc is $(OBJC) ) 47*4882a593Smuzhiyun#$(warning cflags is $(CFLAGS)) 48*4882a593Smuzhiyun#下面实际的编译过程加上: 49*4882a593Smuzhiyun$(TARGET): $(OBJCPP) $(OBJC) 50*4882a593Smuzhiyun# $(CXX) $(LDFLAGS) -o $(TARGET) 51*4882a593Smuzhiyun $(CXX) $(LDFLAGS) $(OBJCPP) $(OBJC) -o $@ $(LIBS) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun$(OBJCPP): %.o: %.cpp 54*4882a593Smuzhiyun $(CXX) -c $< $(CXXFLAGS) $(INCLUDE) -o $@ 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun$(OBJC): %.o: %.c 57*4882a593Smuzhiyun $(CC) -c $(CFLAGS) $(INCLUDE) $< -o $@ 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun#control: clean $(APP) 60*4882a593Smuzhiyun# $(CPP) -m32 -o $@ $(INCLUDE) $(APP) 61*4882a593Smuzhiyun 62*4882a593Smuzhiyunclean: 63*4882a593Smuzhiyun rm -fr $(OBJCPP) $(OBJC) 64*4882a593Smuzhiyun# rm -f control 65*4882a593Smuzhiyun 66