您的位置:首页 > 其它

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会使用环境变量的值来进行编译。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  makefile