Makefile文件内容如下图:
对应文件目录结构如下图:
详解:
1)makefile 脚本可以定义变量,例如 上图中的 EXE SUBDIR 等,均是定义的变量,使用时通过 $(变量名) 即可获取
2)$(EXE):$(CXX_OBJECTS) $(EXE)表示目标,即 test;$(CXX_OBJECTS)即生成该目标的依赖
%.o:%.cpp %.o表示目标;%.cpp即生成该目标的依赖 %表示通配符
3)patsubst foreach wildcard 是makefile预定义的一个函数,通过$来调用
patsubst:替换通配符
foreach:遍历
wildcard: 在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用该函数。
$(foreach dir, $(SUBDIR), $(wildcard $(dir)/*.cpp)):表示在各Main Other目录 下的所有.cpp全都获取到
$(patsubst %.cpp, %.o, $(CXX_SOURCES)) :表示把$(CXX_SOURCES) 中所有的.cpp字符串全都替换成.o字符串,说白了就是想获取每个.cpp对应的.o
$(patsubst %.o, %d, $(CXX_OBJECTS)) :同理再通过.o获取.d ,*.d文件中包含了每个对应.cpp文件include的头文件信息
4)$<:依赖项的第一个 $^:所有的依赖项 $@:目标
-g:生成可调试程序
-o:输出
-Lpath:库目录 L+path
-llibname :库名 l+库名(linux下库命名格式 libxxxx.so动态库, l后面只需要跟xxx即可)
-MMD:编译对应文件.cpp成.o文件时,同时生成一个.d文件,包含了.cpp文件的include信息.
-include:需要依赖的头文件信息
5)调用make默认执行第一个选项