Makefile编译规则:
1. Makefile默认只检查.c .cpp .o文件的时间戳,不会检测.h头文件的变化(除非明确设置了依赖关系)。
2. make可以自动推导文件以及依赖的文件,即由 $object 的 .o 文件推导相应的 .c 文件
3. Makefile支持嵌套,大项目中各功能模块的源代码要分开,Makefile自然也就分开;
@echo
Make执行过程中自动输出 命令执行过程,加上 @ 的话就不会输出命令执行过程
Makefile 伪目标:
伪目标的目的是 在一些大型项目中,会有文件名和指令名相同的情况,添加伪目标可以防止这个问题。.PHONY : clean
clean:
-rm edit $(object)
## .PHONY 意思下面的 clean 是一个伪目标,
## rm前面的 "-" 表示 也许某些文件出现问题,但是不要管继续做后面的事;
make工作方式
1.读入所有的Makefile,包括include的Makefile
2.初始化变量
3.推导隐晦规则
4.为目标文件创建依赖关系
5.根据依赖关系,决定哪些目标文件需要重新生成
6.执行命令
Makefile 的环境变量(注意和include的区别)
Makefile也是有环境变量的,可以用export导出当前Makefile定义的环境变量,当其他Makefile include当前Makefile的时候,就可以使用该环境变量。
编译器总结
@ strip 删除符号软连接,减少可执行程序大小(gdb调试的程序不能strip,因为软链接被删除了)
@ ar 生成静态库
@ ld 链接
编译
-c 依赖 -o 目标
编译Flag
-I(大i)用来指 头文件和静态库
-L 用来指动态库
实例:-I(大i)

Makefile-common 命名法则
#Makefile模板
CROSS_COMPILE:=编译器-
CC:=$(CROSS_COMPILE)gcc
CXX:=$(CROSS_COMPILT)g++
#可执行程序
TARGET:=program_name ##name
TAR_DIR:=program_dir ##dir
#c、cpp编译指令
CFLAGS:= -g -Wall
CXXFLAGS:= -g -Wall
#c/cpp头文件
C_DIR:= ./
CXX_DIR:= ./
#c/cpp文件
C_SRC:= ./
CPP_SRC:= ./
CXX_SRC := ./
#静态库、静态库对应的头文件
LIBS_INC_DIR:= ../contrib/lib/
LIBS_DIR =
INC_DIR:= ../contrib/ ##指所有.c和.cpp的头文件
LIBS =
#目标
OBJS:=
INC_DIR的使用

OBJS的常用写法:


浙公网安备 33010602011771号