天天看点

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 [email protected] $(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 [email protected]

查找库文件位置命令

[email protected]:~# pkg-config --cflags opencv

Makefile文件注释与学习