简要Makefile知识

Makefile规则

#文件命名
执行GNUmakefile,makefile,Makefile中第一个存在的文件 推荐Makefile

#更新规则
如果make的命令行中指定了一个目标,则更新这个目标,如果不指定目标,则更新文件中第一条规则的目标(缺省目标)

@: 只显示命令结果,不显示命令本身
-: 如果命令执行碰到错位,忽略错误,继续执行

#常用约定目标
all: 执行主要的编译工作,通常用作缺省目标
install: 执行编译后的安装工作,把可执行文件/配置文件/文档等分别拷到不同的安装目录
clean: 删除编译生成的二进制文件
disclean: 不仅删除编译生成的二进制文件,也删除其它生成的文件,例如配置文件和格式转换后的文档

#隐含规则推导
make -p命令打印隐含规则(implicit rule)数据库

通常用CFLAGS定义成一些编译选项,必然-O,-g等,而把CPPFLAGS定义成一些预处理选项,如-D, -I等

#变量语法
= 延迟展开
=: 立即展开
?= 赋值运算符
foo ?= $(bar) 如果foo没定义过,那么定义foo的值为$(bar);如果foo已经定义,则什么都不做,不会给foo重新赋值
+= 给变量追击值 (变量由=还是=:定义,会影响+=的特性)

#常用的特殊变量
$@ 表示规则中的目标
$< 表示规则中的第一个条件
$? 表示规则中所有比目标新的条件,组成一个列表,以空格分隔
$^ 表示规则中的所有条件,组成一个列表,以空格分隔

#常用的变量
AR
ARFLAGS
AS
ASFLAGS
CC
CFLAGS
CXX
CXXFLAGS
CPP
CPPFLAGS
LD
LDFLAGS
TARGET_ARCH
OUTPUT_OPTION 输出的命令行选项,缺省值是 -o $@
LINK.o 把 .o 文件链接在一起的命令行,缺省值是 $(CC) $(LDFLAGS) $(TARGET_ARCH)
LINK.c
LINK.cc
COMPILE.c
COMPILE.cc
RM

#自动处理头文件的依赖关系
生成目标文件和源文件的依赖关系(-MM忽略头文件)
$gcc -M main.c
$gcc -MM main.c

#常用make命令行选项
-n 按执行顺序打印要执行的命令 用于检查Makefile的正确性
-c 切换到哦啊另一个目录下执行那个目录下的Makefile
多级源代码目录,在一个总的Makefile中用make -c命令执行每个子目录下的Makefile
用=或:=临时设置变量的值
会覆盖掉Makefile文件中的值

 

参考:

《Linux c编程一站式学习》,作者:宋劲杉

posted @ 2015-10-24 21:33  onemuji  阅读(171)  评论(0)    收藏  举报