Chinaunix首页 | 论坛 | 博客
  • 博客访问: 357870
  • 博文数量: 49
  • 博客积分: 3229
  • 博客等级: 中校
  • 技术积分: 616
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-26 21:46
文章分类

全部博文(49)

文章存档

2011年(8)

2010年(2)

2009年(3)

2008年(36)

我的朋友

分类:

2008-07-30 15:55:18

以下均来自收集,自己整理了一下,只整理了以前不熟悉,而目前会用到的一些东西:
一:Makefile中定义的方式:
 1.递归展开方式,递归展开方式定义的变量是在引用在该变量时进行替换的,即如果该变量包含了对其他变量的,则在引用该变量时一次性将内嵌的变量全部展开,虽然这种类型的变量能够很好地完成的指令,但是它也有严重的缺点,如不能在变量后追加内容(因为语句:CFLAGS = $(CFLAGS) -O在变量扩展过程中可能导致无穷循环)。
 2.简单方式。用:=定义。为了避免上述问题,简单扩展型变量的值在定义处展开,并且只展开一次,因此它不包含任何对其它变量的引用,从而消除变量的嵌套引用。
 3.用?=定义变量,它的含义是如果变量还没定义 ,即如果用户不定义,就提供给他默认的。
 举例说明递归展开与简单方式定义的区别:

CFLAGS:=-Wall
CFLAGS:=$(CFLAGS)
all:
      echo $(CFLAGS)
 对于以上,执行make后echo输出-Wall
 CFLAGS=-Wall
 CFLAGS=$(CFLAGS)
 all:
      echo $(CFLAGS)


  执行make后echo输出:Makefile:2:***Recursive variable `CFLAGS


GNU make 的主要预定义变量:
预定义变量                      含义
$*              不包含扩展名的目标名称。
$+              所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$<              第一个依赖文件的名称。
$?              所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@              目标的完整名称。
$^              所有的依赖文件,以空格分开,不包含重复的依赖文件。
$%              如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称
                为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
AR              归档维护程序的名称,默认值为 ar。
ARFLAGS         归档维护程序的选项。
AS              汇编程序的名称,默认值为 as。
ASFLAGS         汇编程序的选项。
CC              C 编译器的名称,默认值为 cc。
CCFLAGS         C 编译器的选项。
CPP             C 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGS        C 预编译的选项。
CXX             C++ 编译器的名称,默认值为 g++。
CXXFLAGS        C++ 编译器的选项。
FC              FORTRAN 编译器的名称,默认值为 f77。
FFLAGS          FORTRAN 编译器的选项。

参考:
阅读(1501) | 评论(0) | 转发(0) |
0

上一篇:一道C的面试题

下一篇:如何选择cpu

给主人留下些什么吧!~~