Makefile文件注释与学习

#目标文件
PROJECT = resnet50
#?=是如果没有定义,则定义
CXX ?= g++
CC ?= gcc

CFLAGS += -O2 -Wall -Wpointer-arith -std=c++11 -ffast-math
CFLAGS += -I…/common/
#-Wpointer-arith对函数指针或者void *类型的指针进行算术操作时给出警告,也很有用。 -Wall 并不会打开此项。
#-ffast-math 选项定义了预处理器宏 FAST_MATH, 指示编译不必遵循 IEEE 和 ISO 的浮点运算标准。-ffast-math标记是一个群组选项

LDFLAGS += -ln2cube -lhineon -lopencv_videoio -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc -lopencv_core -lpthread

CUR_DIR = $(shell pwd)

MODDIR = $(CUR_DIR)/model
BUILD = $(CUR_DIR)/build
VPATH = ( S R C ) : (SRC): (SRC):(SRC_DPUTILS)
C_DIR := $(shell find $(SRC) -name *.c)
#定义目标文件为源文件.c改成.o,并去掉所有目录
OBJ = $(patsubst %.c, %.o, $(notdir $(C_DIR)))
CC_DIR := $(shell find $(SRC) -name *.cc)
OBJ += $(patsubst %.cc, %.o, $(notdir $(CC_DIR)))
CPP_DIR := $(shell find $(SRC) -name *.cpp)
OBJ += $(patsubst %.cpp, %.o, $(notdir $(CPP_DIR)))
OBJ += dputils.o

CFLAGS += -mcpu=cortex-a53

MODEL = $(CUR_DIR)/model/dpu_resnet50_0.elf
SRC = $(CUR_DIR)/src
SRC_DPUTILS = $(shell cd …/common/; pwd)

.PHONY: all clean
#第一个目标为生成一个目录,第二个目标为生成项目目标
all: $(BUILD) $(PROJECT)
#addprefix $(BUILD)/作为前缀加到全部依赖项上,并指定目标文件
$(PROJECT) : $(OBJ)
$(CXX) $(CFLAGS) $(addprefix $(BUILD)/, $^) $(MODEL) -o $@ $(LDFLAGS)
#-c编译,应可省,-o指定存入目录及文件名
%.o : %.cc
$(CXX) -c $(CFLAGS) $< -o ( B U I L D ) / (BUILD)/ (BUILD)/@
%.o : %.cpp
$(CXX) -c $(CFLAGS) $< -o ( B U I L D ) / (BUILD)/ (BUILD)/@

clean:
$(RM) -rf $(BUILD)
$(RM) $(PROJECT)
#创造递归目录
$(BUILD) :
-mkdir -p $@

查找库文件位置命令
root@pynq:~# pkg-config --cflags opencv
Makefile文件注释与学习_第1张图片

你可能感兴趣的:(Ubutun,Linux,嵌入式)