【Linux C】第八章 Makefile

Makefile相当于脚本语言。目的在于自动化编译。去执行是由所编译文件的依赖关系驱动。

1.        Makefile文件的组成内容

a)        显示规则:说明生成目标文件的方法和步骤。显示指出文件依赖关系。

b)        隐式规则:makefile本身自动推到规则。

c)        变量定义:类似C宏定义(类似shell 变量)。

d)        文件指示:引用其他makefile,制定makefile有效部分,定义多行的命令。

e)        注释 # 

2.        Make命令自动当前目录下寻找makefile

a)        Make  –f  <文件名> 可以用户指定makefile

b)        make –I 或者 make –include-dir可以制定makefile目录

c)        make也会在/usr/local/bin或/usr/include下寻找目录中包含的文件。

d)        make –include <filename> 未找到文件时不报错。

3.        make退出码

a)        0 表示makefile文件成功执行。

b)        1表示makefile文件执行出现错误。

c)        2表示在make –q 选项下一些目标不需要更新。

4.        规则形式

targets : prerequisites

command

……

5.        Make认为目标文件依赖文件需要更新有三个条件(没有生成,修改时间晚,本身要更新)。

6.        隐式规则:make自动使用gcc –c 命令讲.c编译成同名的.o文件。

7.        .PHONY:标号  表示该目标为伪目标,不生成文件。第一个目标为默认目标,一般为all。

8.        Makefile允许使用通配符,如*.c。

9.        Vpath变量实现搜索源文件的功能。若无,则在当前目录下寻找,若有,则在制定目录。

a)        eg.  vpath = ./src:../include

b)        制定模式   vpath <pattern>  <directories>    eg. vpath %.c /src  %通配符表示匹配若干个字符数大于零的字符。

10.    Make会把使用的命令显示出来。

a)        命令前加@字符,会执行但不显示。

b)        Make –n 或 make –just-print则只是显示命令但是不执行(用于debug)不管有没有@。

c)        当makefile中想让上一条shell命令结果用在一条命令中时,用分号连接两命令。 eg.  cd /home/admin;pwd        

11.    Makefile中命令退出码非零,则中止执行当前规则。

a)        命令行前加上—,则忽视该命令执行结果的判断。

b)        Make –I 或者 make –ignore-errors可以忽视所有命令的退出码。

c)        某标号以.IGNORE声明作为目标。则该目标中的所有命令将会忽略退出码检测。

12.    使用变量 $(varname) 。为避免重意,$用$$表示。

13.    变量可以传递。

a)        := 避免递归定义

b)        ?=若定义过则不赋值。

c)        +=追加变量定义

d)        自动化变量 $@, $%, $< , $? , $^ , $+ , $*

14.    使用判定条件

a)        <conditional-directive>

 <text if true >

else

<text if faulse>

endif

b)        Ifeq若关键字相等则执行。

c)        Ifneq若关键字不相等则执行。

d)        Ifdef若关键字非空则执行,ifndef若关键字为空则执行。

15.    使用函数

a)        语法: $(<function> <arguments>)  或 ${<function><arguments>}

b)        字符串处理函数: subst, patsubst,strip,findstring,filter,filter-out,sort,word,wordlist,words,

c)        Shell 函数: $(shell<command>,<parameter1>,<parameter2>…….)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Makefile是用于自动化编译和构建程序的工具。以下是在Linux下编写Makefile的基本规则: 1. 每个目标都应该包含依赖关系和命令。 2. 目标通常是文件名,但也可以是任何其他名称。 3. 依赖关系是指目标所依赖的文件或其他目标。 4. 命令是指要执行的操作或指令。 5. 使用tab键来缩进命令,而不是空格。 6. 可以使用变量来存储常用的值,例如编译器名称和选项等。 7. 可以使用通配符来匹配多个文件,例如*.c表示所有以.c结尾的文件。 8. 可以使用伪目标来表示不需要生成文件的操作,例如clean和install等。 9. make命令将寻找名为Makefilemakefile文件,并执行其中的规则。 10. 可以使用注释来解释规则,以#开头。 例如,以下是一个简单的Makefile规则: ``` CC = gcc CFLAGS = -Wall -g hello: hello.o $(CC) $(CFLAGS) -o hello hello.o hello.o: hello.c $(CC) $(CFLAGS) -c hello.c clean: rm -f hello hello.o ``` 这个Makefile包含3个规则。第一个规则表示要生成名为hello的目标,它依赖于hello.o文件。它的命令是使用gcc编译器和选项来链接hello.o文件,生成可执行文件hello。 第二个规则表示要生成名为hello.o的目标,它依赖于hello.c文件。它的命令是使用gcc编译器和选项来编译hello.c文件,生成目标文件hello.o。 第三个规则表示要生成名为clean的伪目标,它没有依赖关系,其命令是删除所有生成的文件hello和hello.o。 使用make命令可以执行Makefile中的规则。例如,可以使用以下命令来编译并运行hello程序: ``` make ./hello ``` 可以使用以下命令来清除所有生成的文件: ``` make clean ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值