前言
做项目需要在linux下编译文件,所以临时学习一下Makefile文件的编写,只了解了一些皮毛
代码
编译自己的代码所编写的Makefile文件如下:
INCLUDE_DIRS := ./ /usr/local/include /usr/include
LIBRARY_DIRS := /usr/local/lib /usr/lib
LIBRARIES := opencv_core opencv_imgproc opencv_highgui
WARNINGS := -Wall
CXX:= /usr/bin/g++
COMMON_FLAGS += $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir))
CXXFLAGS := -fPIC $(COMMON_FLAGS)
LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(foreach library,$(LIBRARIES),-1$(library))
all : cnn_decode.bin
cnn_decode.bin : main.o net.o layer.o blob.o math_funtion.o
$(CXX) -c cnn_decode.bin main.o net.o layer.o blob.o math_functions.o $(LDFLAGS) $(WARNINGS)
main.o : main.cpp net.h
$(CXX) -c main.cpp net.h $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
net.o : net.cpp net.h
$(CXX) -c net.cpp net.h $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
layer.o : layer.cpp layer.h
$(CXX) -c layer.cpp layer.h $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
blob.o : blob.cpp blob.h
$(CXX) -c blob.cpp blob.h $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
math_functions.o : math_functions.cpp math_functions.h
$(CXX) -c math_functions.cpp
math_functions.h $(CXXFLAGS) $(LDFLAGS) $(WARNINGS)
.PHONY : clean
clean:
-rm cnn_decode.bin main.o net.o layer.o blob.o math_functions.o
一些学习心得如下:
1、Makefile中的命令如果单独一行,要以tab键开头。
2、Makefile规则包含两部分:一个是依赖关系,一个是生成目标的方法。规则顺序很重要,因为Makefile中只应该有一个最终目标。
3、Makefile中的变量相当于C/C++中的宏,使用的时候$(变量名)。
4、四种赋值方式:
(1)= 递归赋值,Makefile展开后最后被指定的值
(2):= 非递归赋值,取决于在Makefile中的位置
(3) ?= 若没被赋值过则赋值
(4) += 添加等号后面的值
未完待续……