Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)

任务描述

本关任务:学习Makefile中的变量的定义和使用,以及常用的特殊变量使用。

相关知识

变量的使用可以方便我们编写makefile文件,我们可以使用一个简短的变量来替换一个比较长的字符串,这样我们在使用这个字符串的时候就可以方便的使用变量来替换。除此之外,当我们修改某一个字符串时,如果我们没有使用变量,则我们需要修改使用该字符串的每个地方,如果使用了变量,我们只需要修改变量定义处即可。

makefile 变量的命令可以包含字符、数字、下划线(可以是数字开头),并且大小写敏感。

makefile变量在声明时需要对其进行赋值,而在使用该变量时需要在变量名前加上**$符号 例如$(VARNAME),如果用户需要在makefile文件中使用真实的$字符,则使用$$**表示。

makefile中对变量的赋值方式有三种,分别是:


  1. 递归赋值(=):递归赋值,即赋值后并不马上生效,等到使用时才真正的赋值,此时通递归找出当前的值;
  2. 直接赋值(:=):是将":="右边中包含的变量直接展开给左边的变量赋值;
  3. 条件赋值(?=):只有此变量在之前没有赋值的情况下才会对这个变量进行赋值,所有一般用在第一次赋值;

makefile除了可以自定义变量外,还存在一些系统默认的特殊变量,这些特殊变量可以方便帮助我们快速的编写makefile文件,例如:$@、$<和$^等等。

本关将介绍makefile的变量的定义和使用方法,以及使用特殊变量来编写makefile文件。

Makefile 自定义变量

自定义变量格式:

  • 递归赋值 变量名 = 变量内容
  • 直接赋值 变量名 := 变量内容
  • 条件赋值 变量名 ?= 变量内容

变量的使用格式为: $变量名或者${变量名}或者$(变量名)

案例演示1:

在上一关中案例2中的项包含了5个源码文件和一个头文件,如果使用变量来编写makefile则会显示出比较简洁的格式,具体操作如下:


  1. vim makefile
  2. make
  • vim makefile

  1. object=main.o Add.o Sub.o Mul.o Div.o
  2. exe : $(object)
  3. gcc -o exe $(object)
  4. main.o : main.c def.h
  5. gcc -c main.c -o main.o
  6. Add.o : Add.c
  7. gcc -c Add.c -o Add.o
  8. Sub.o : Sub.c
  9. gcc -c Sub.c -o Sub.o
  10. Mul.o : Mul.c
  11. gcc -c Mul.c -o Mul.o
  12. Div.o : Div.c
  13. gcc -c Div.c -o Div.o

Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)_第1张图片

[makefile内容]

Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)_第2张图片

[请在右侧“命令行”里直接体验]

可以看到,我们使用object来表示main.o Add.o Sub.o Mul.o Div.o,这样我们就可以使用$(object)来表示以上目标文件,而不是每次输入这5个目标文件。

Makefile 特殊变量

makefile常用的特殊变量有:


  1. $@:表示所有目标;
  2. $^:表示所有依赖目标的集合,以空格分隔;
  3. $<:表示依赖目标中第一个目标的名子;

案例演示1:

接着上一个案例中的项目,如果使用特殊变量来编写makefile则会显示出更加简洁的格式,具体操作如下:


  1. vim makefile
  2. make
  • vim makefile

  1. object=main.o Add.o Sub.o Mul.o Div.o
  2. exe : $(object)
  3. gcc -o $@ $(object)
  4. main.o : main.c def.h
  5. gcc -c $< -o $@
  6. Add.o : Add.c
  7. gcc -c $< -o $@
  8. Sub.o : Sub.c
  9. gcc -c $< -o $@
  10. Mul.o : Mul.c
  11. gcc -c $< -o $@
  12. Div.o : Div.c
  13. gcc -c $< -o $@

Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)_第3张图片

[请在右侧“命令行”里直接体验]

编程要求

本关任务是学会使用makefile来编译项目。

具体编程要求如下:

  • 编写5个源文件Add.c、Sub.c、Mul.c、Div.c和main.c和一个头文件def.h,文件内容同第一关案例2
  • 使用makefile的变量来编译生成一个名为VarCalc的可执行文件;
测试说明

本关的测试需要用户在右侧的命令行下完成,用户只需将需要完成的命令在右侧命令行下直接操作即可,然后点击评测按钮,平台会自动验证用户是否按照要求去检测结果。

Ways

其实是和第一关大差不差 唯一不同的是引入了Makefile 特殊变量

那我们只需要在第1第1的基础上稍稍为修改下

Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)_第4张图片

Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)_第5张图片

Linux实验--C语言编程--Makefile管理(第2关:Makefile之变量使用)_第6张图片

你可能感兴趣的:(Linux,linux,c语言,运维)