Makefile浅谈

1、configure文件

 configure文件可以自动配置源代码以适应各种不同平台上Linux系统的特性,根据系统参数及环境产生合适的Makefile文件和C的头文件,让源代码可以很方便地在不同的平台上被编译

2、gcc常用选项

-Idir将头文件的搜索路径扩大,包含dir目录
-Ldir将链接时使用的链接库搜索路径扩大,包含dir目录。gcc都会优先使用共享程序库
-static仅选用静态程序库进行链接,如果一个目录中静态库和动态库都存在,则仅选用静态库
-g包括调试信息
-On优化程序,程序优化后执行速度会更快,程序的占用空间会更小。通常gcc会进行很小的优化,优化的级别可以选择,即n。最常用的优化级别是2
-Wall打开所有gcc能够提供的、常用的警告信息

3、Makefile文件

Make工具最主要也是最基本的功能就是通过Makefile文件来描述源程序之间的相互关系并自动维护编译工作,make如果没有“-f”参数,则系统将默认当前目录下名为makefile或者Makefile的文件为描述文件。在Linux系统中,GUN make工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜素makefile文件

4、伪目标

如果命令行中没有指定伪目标,则系统默认“target”指向描述文件中第一个伪目标,一般第一个伪目标为“all”

clean伪目标,可用来清除编译过程中的中间文件

distclean,除删除编译过程中产生的中间文件外,还可以将生成的Makefile文件一并删除

install   可以将生成的可执行文件和其他相关的文件安装到“prefix”选项所定义的安装路径,即通常意义上的“安装”软件

uninstall   可以将可执行文件和其他相关的文件从安装路径上删除,即通常意义上的“卸载”软件

5、Makefile中的预定义变量

变量名含义默认值
CCC语言编译器的名称cc
RM删除文件程序的名称rm -f
CFLAGSC语言编译器的编译选项无默认值
 6、Makefile中的自动变量

变量含义
$<表示依赖项中第一个依赖文件的名称
$@目标项中目标文件的名称
$^依赖项中,所有不重复的依赖文件,这些文件之间以空格分开
7、内置规则

后缀规则:定义如何将一个具有特定文件名后缀的文件(如.c文件)转换成为具有另一种文件名后缀的文件(如.o文件)

模式规则:模式规则看起来非常类似于正则规则,但在目标名称前面多了一个“%”号

自动推导规则:使用命令make编译扩展名为.c的C语言文件的时候,源文件的编译规则不用明确给出。这是因为make进行编译的时候会使用一个默认的编译规则,按照默认规则完成对.c文件的编译,生成对应的.o 文件。


hello.c

int main(void)
{
      printf("hello world") ;
      return 0 ;
}

Makefile

hello : hello.c
         gcc -o hello hell.c
Makefile 改进  把编译和链接分开
hello : hello.o
          gcc -o hello hello.o          链接
hello.o : hello.c
          gcc -o hello.o -c hello.c     编译  -c表示只编译不链接
Makefile再次改进,使用模式匹配      
hello : hello.o
        gcc -o $@ $^        //目标可以用$@表示,所有的依赖可以用$^表示     gcc -o hello hello.o
%.o : %.c                   //hello.o : hello.c
        gcc -o $@ -c &<     //目标可以用$@表示,第一个依赖可以用$<表示      gcc -o hello.o -c hello.c 
clean : 
        rm *.o hello

Makefile再次改进,使用变量

CFLAGS = -O2
OBJS = hello.o
TARGET = cacu
$(TARGET) : $(OBJS)
        $(CC) -o $@ $^ $(CFLAGS)
$(OBJS) : %.o : %.c
        $(CC) -o $@ -c $<
clean:
        $(RM) $(TARGET) $(OBJS)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值