分享一下学习笔记
makefile编写规则:
(1)需要由makefile工具创建的目标体(target),通常是目标文件 可执行文件 一个标签
(2)要创建的目标体所依赖的文件(dependency_file)
(3)创建每个目标体时需要的运行命令(command):每条command前要用tab字符
target : dependency_file
command
列如:有hello.c hello.h希望创建hello.o执行命令为:gcc -c hello.c -o hello.o
对应的makefile:
hello.o:hello.c hello.h
gcc -c hello.c -o hello,o
后运行make target
ps:每个makefile文件结尾要有clean:rm 。。。。。
makefile变量
代替文本字符串
方式:
(1)递归展开方式 定义格式:VAR=var
(2)简单扩展方式 定义格式:VAR: =var
make中的变量使用均使用格式为:$(VAR)
变量分为
用户自定义变量,预定义变量(包含常见编译器,汇编器的名称及其编译选项) ,自动变量,环境变量
常见预定义变量
AR
|
库文件维护程序的名称,默认值为ar
|
AS
|
汇编程序的名称,默认值为as
|
CC
|
C编译器的名称,默认值是cc,
所以要“CC=gcc”列出来
|
CPP
|
C预编译器的名称,默认值是$(CC)-E
|
CXX |
C++编译器的名称。默认值是g++
|
FC |
FORTRAN编译器的名称。默认值是f77
|
ARFLAGS
|
库文件维护程序的选项,无默认值
|
ASFLAGS
| 汇编程序的选项,无默认值 |
CFLAGS
|
c编译器程序选项,无默认值 一般CFLAGS = -Wall -O -g
|
CPPFLAGS
|
c预编译器选项,无默认值
|
CXXFLAGS
|
C++编译器选项无默认值
|
FFLAGS
|
|
命令格式
|
含义
|
命令格式
|
含义
|
$*
|
不包含扩展名的目标文件名称
|
$+
|
所有的依赖文件,以空格分开并已出现的先后为序,
可能包含重复的依赖文件
|
$<
|
第一个依赖的文件名称
|
$?
|
所有时间戳比目标文件晚的依赖文件 并以空格分开
|
$@ |
目标文件的完整名称
|
$^
|
所有不重复的依赖文件,以空格分开
|
$%
|
如果目标是归档成员,则该变量
表示目标的归档成员名称
|
|
|
|
|
|
|
makefile规则
隐式规则:不必详细制定编译具体细节,只需要把目标文件列出来即可
如:
target:dependency_file
C编译:所有的 .o 都可由 .c 文件使用命令 $(CC)$(CPPFLAGS)$(CFLAGS) -c file.c -o file,o
c++编译:.cc或.C变为.o
模式规则
仅仅能够用makefile的默认变量来进行操作
make的使用
make的命令
命令格式
|
含义
|
命令格式
|
含义
|
-C dir | 读入指定目录dir下的makefile |
-f file
|
读入当前目录下的file文件作为makefile
|
-i
|
忽略所以命令执行错误
|
-I dir
|
指定被包含的makefile所在的目录dir
|
-n
|
只打印执行的命令,但不执行这些命令
|
-p
|
显示make变量数据库和隐含规则
|
-s
|
在执行命令时不显示命令
|
-w
|
如果make在执行过程中改变目录 打印当前目录名
|