Linux工程管理器——make

一、定义

  工程管理器,顾名思义,是指管理较多的文件 
Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作 。

二、使用命令简介

 makefile是make读入的惟一配置文件,因此本节的内容实际就是讲述makefile的编写规则。在一个makefile中通常包含如下内容:
    a.需要由make工具创建的目标体(target),                 通常是目标文件或可执行文件;
    b.要创建的目标体所依赖的文件;
创建每个目标体时需要运行的命令(command),这一行必须以制表符(tab键)开头

格式如下:

target:denpendcy_files

      command  /*  该行必须以Tab键开头  */

  如:

hello.o: hello.c hello.h

     gcc -c hello.c -o hello.o

  

接着在终端执行make hello.o命令,make将自动执行gcc -c hello.c -o hello.o,生成hello.o文件

3.makefile变量

(1)在makefile中的变量定义有两种方式:一种是递归展开方式,另一种是简单方式

       1)递归展开方式:VAR=var

       递归展开方式定义的变量是在引用该变量时进行替换的,即如果该变量包含对其他变量的引用,则在引用该变量时一次性将内嵌的变量全部展开。但是它也有严重的缺点,如不能在变量后追加内容(因为语句:CFLAGS=$(CFLAGS)-O在变量扩展过程中可能导致无穷循环)。

例如:

OBJS = kang.o yul.o

CC = gcc

CFLAGS =  -Wall  -O  -g

david : $(OBJS)

       $(CC)  $(OBJS)  -o david

kang.o : kang.c kang.h

       $(CC)  $(CFLAGS)  -c  kang.c  -o  kang.o

yul.o : yul.c yul.h

       $(CC)  $(CFLAGS)  -c  yul.c  -o  yul

2)简单扩展方式:VAR:=var

       简单扩展方式变量的值在定义处展开,并且只展开一次,因此它不包含对其他变量的引用,从而消除变量的嵌套引用。

(2)makefile中的变量分为用户自定义、预定义变量、自动变量和环境变量

       1)预定义变量包含了常见编译器、汇编器的名称及其编译选项

 2)自动变量

原文地址:https://www.cnblogs.com/tansuoxinweilai/p/11630391.html