作为今天的学习记录:
- makefile是具备自己的环境变量,当然还有很多类型的变量,比方说,自定义和预定义变量。这里不得不说的是环境变量,在编写makefile的时候,我们总是想着:就一个makefile,然后可以用尽所有工程(这跟我们写移植性代码非常强的问题一样)。那么就需要清晰地考虑makefile的环境变量了。
- make进行递归调用(此时,有各种的subdir子目录),为了让subdir可以正确且按照我们的意愿去make(这里特指编译)。我们需要将maindir顶层目录的环境变量,通过各种方式(目前知道:makefile自带的具备环境变量属性的变量;或者通过export来传递变量属性,使得subdir获得maindir已经成功设置的环境变量)
- 多个目标(特指“终极目标”),像一个开源软件,总是会有各种test文档,这样附带了test_program,我们需要同时生成多个执行文件,这样求我们编写具备生成多个目标的makefile文件。
- 首先,可以直接使用makefile的伪目标,这样最简单。通过,make XX来决定
解决疑问:
- Makefile 中:= ?= += =的区别?解答链接
- makefile中,在规则的命令中使用-号,为了忽略错误继续执行,那么如果+号呢?点击链接
- 在通用makefile文章里面,使用makefile.build时候,出现了.d格式文件,点击链接解析.d文件(依赖文件,给makefile使用)
.d dependencies
依赖文件。
是给Makefile用的。内容和Makefile的target相似:
假设hello.c里有
#include "hello.h"
hello.h里有
#include "foo.h"
#include "bar.h"
gcc -c -MMD hello.c就会产生hello.d
hello.o: hello.c hello.h foo.h bar.h
在Makefile里用-include 进来后
即使hello.c没有修改,即使hello.c没有直接include foo.h bar.h 只要hello.h foo.h bar.h中的任意一个修改都会重新编译hello.c
- 所谓的归档(使用gcc ar的时候),这意味着创建静态库,为了使多个.o合并在一起