今天练习了一个小实验:
[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会使用环境变量的值来进行编译。。。。。
阅读(16670) | 评论(1) | 转发(3) |