Makefile常用的变量
2017-04-10 08:52
211 查看
1、自动变量
[html] view
plain copy
变量 说明
$@ 规则的目标所对应的文件名
$< 规则中的第一个相关文件名
$^ 规则中所有相关文件的列表,以空格分割
$? 规则中日期新于目标的所有相关文件的列表,以空格分割
$(@D) 目标文件的目录部分
$(@F) 目标文件的文件名部分
2、预定义变量
[html] view
plain copy
变量 说明
AR 归档维护程序,默认值=ar
CPP c预处理程序,默认值=cpp
CC c编译程序,默认值=cc
AS 汇编程序,默认值=as
RM 文件删除程序,默认值=rm -f
ARFLAGS 传给归档维护程序的标志,默认值=rv
CPPFLAGS 传给c预处理程序的标志,无默认值
CFLAGS 传给c编译程序的标志,无默认值
ASFLAGS 传给汇编程序的标志,无默认值
LDFLAGS 传给链接程序(ld)的标志,无默认值
今天练习了一个小实验:
[root@feifei p3.1]# ls
Makefile p3.1.c p3.1.o p3.1.pre.c p3.1.s
[root@feifei p3.1]# vi Makefile
#CC=gcc
#CFLAGS=-o
p3.1 : p3.1.c
$(CC) $(CFLAGS) $@ p3.1.c
#$(CC) -o $@ p3.1.c
echo $(CFLAGS)
实验的目的是:
一.验证这个CFLAGS到底有没有预定义的值,并且验证这个CC的预定义值
过程如下:
[root@feifei p3.1]# make
cc p3.1 p3.1.c (这个地方说明了CFLAGS没有起作用,忽略了它。。。。)
cc: p3.1:没有那个文件或目录
make: *** [p3.1] 错误 1
从上面的结果说明:这个CC变量是是make的预订的值(即CC=cc)(解释,这个并不是环境变量,如下解释)
[root@feifei p3.1]# echo $CC
[root@feifei p3.1]#
说明系统并没有CC这个环境变量,我的认为是这个验证了书上写的是makefile的预定义变量,至于在哪定义的,却不知道
而对于CFLAGS这个变量无法验证是不是makefile的预定义变量,并且一定不是环境变量:如下
[root@feifei p3.1]# echo $CFLAGS
[root@feifei p3.1]#
这说明了一个问题,对于makfile中引用的变量,如果不是makefile预定义的变量,也不只是环境变量的话,那么这个变量就以空格来表示(是不是空格,我也不知道,但至少是空的,就是没有,从第一次make的执行过程可以看出)
二.我试着对CFLAGS设置为环境变量,然后看看这个make可以执行下去不,如下:
[root@feifei p3.1]# export CFLAGS=-o
[root@feifei p3.1]# echo $CFLAGS
-o
说明已经设置好了,下面验证:
[root@feifei p3.1]# make
cc -o p3.1 p3.1.c
#cc -o p3.1 p3.1.c
echo -o
-o
说明验证成功,
总结如下:makefile会使用环境变量的值来进行编译。。。。。
[html] view
plain copy
变量 说明
$@ 规则的目标所对应的文件名
$< 规则中的第一个相关文件名
$^ 规则中所有相关文件的列表,以空格分割
$? 规则中日期新于目标的所有相关文件的列表,以空格分割
$(@D) 目标文件的目录部分
$(@F) 目标文件的文件名部分
2、预定义变量
[html] view
plain copy
变量 说明
AR 归档维护程序,默认值=ar
CPP c预处理程序,默认值=cpp
CC c编译程序,默认值=cc
AS 汇编程序,默认值=as
RM 文件删除程序,默认值=rm -f
ARFLAGS 传给归档维护程序的标志,默认值=rv
CPPFLAGS 传给c预处理程序的标志,无默认值
CFLAGS 传给c编译程序的标志,无默认值
ASFLAGS 传给汇编程序的标志,无默认值
LDFLAGS 传给链接程序(ld)的标志,无默认值
今天练习了一个小实验:
[root@feifei p3.1]# ls
Makefile p3.1.c p3.1.o p3.1.pre.c p3.1.s
[root@feifei p3.1]# vi Makefile
#CC=gcc
#CFLAGS=-o
p3.1 : p3.1.c
$(CC) $(CFLAGS) $@ p3.1.c
#$(CC) -o $@ p3.1.c
echo $(CFLAGS)
实验的目的是:
一.验证这个CFLAGS到底有没有预定义的值,并且验证这个CC的预定义值
过程如下:
[root@feifei p3.1]# make
cc p3.1 p3.1.c (这个地方说明了CFLAGS没有起作用,忽略了它。。。。)
cc: p3.1:没有那个文件或目录
make: *** [p3.1] 错误 1
从上面的结果说明:这个CC变量是是make的预订的值(即CC=cc)(解释,这个并不是环境变量,如下解释)
[root@feifei p3.1]# echo $CC
[root@feifei p3.1]#
说明系统并没有CC这个环境变量,我的认为是这个验证了书上写的是makefile的预定义变量,至于在哪定义的,却不知道
而对于CFLAGS这个变量无法验证是不是makefile的预定义变量,并且一定不是环境变量:如下
[root@feifei p3.1]# echo $CFLAGS
[root@feifei p3.1]#
这说明了一个问题,对于makfile中引用的变量,如果不是makefile预定义的变量,也不只是环境变量的话,那么这个变量就以空格来表示(是不是空格,我也不知道,但至少是空的,就是没有,从第一次make的执行过程可以看出)
二.我试着对CFLAGS设置为环境变量,然后看看这个make可以执行下去不,如下:
[root@feifei p3.1]# export CFLAGS=-o
[root@feifei p3.1]# echo $CFLAGS
-o
说明已经设置好了,下面验证:
[root@feifei p3.1]# make
cc -o p3.1 p3.1.c
#cc -o p3.1 p3.1.c
echo -o
-o
说明验证成功,
总结如下:makefile会使用环境变量的值来进行编译。。。。。
相关文章推荐
- Makefile中的常用变量与函数
- android makefile 常用宏名称和内置变量
- Make选项及makefile常用变量
- Makefile 常用变量
- Makefile $@ $^ $< 三个常用变量
- Makefile中常用自动变量
- Makefile.am 常用变量说明
- makefile 的主要预定义变量及常用命令行选项
- Android MakeFile 常用变量/函数总结
- makefile 常用自动化变量
- makefile中的一些常用变量
- Makefile中常用自动化变量
- makefile常用指令和常见变量。
- makefile常用函数和自动化变量
- Make选项及makefile常用变量
- 编写Makefile文件常用的三个变量
- Makefile常用变量和规则备忘
- Make选项及makefile常用变量
- makefile编译选项与常用变量
- Makefile常用的变量