Makefile 使用

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默认执行第一个选项

原文地址:https://www.cnblogs.com/helloc14/p/12206720.html