make 的基本语法与变量(鸟哥)

基本的 makefile 规则是这样的:

目标(target):目标文件1 目标文件2
<tab>    gcc -o 欲建立的执行文件 目标文件1 目标文件2

目标(target)就是我们想要建立的信息,目标文件是具有关联性的,建立执行文件的语法是以<tab>按键开头的那一行。特别注意,“命令行必须要以tab按键作为开头”。它的规则基本上是这样的:

  • makefile 中的 # 表示注释;
  • <tab> 要在命令行的第一个字符;
  • 目标(target)与目标文件之间以 : 隔开。
# 1. 先建立编译的规则
$ vi makefile
main: main.o haha.o sin_value.o cos_value.o
    gcc -o main main.o haha.o sin_value.o cos_value.o -lm

clean:
    rm -f main main.o haha.o sin_value.o cos_value.o

# 2. 测试
$ make clean
rm -rf main main.o haha.o sin_value.o cos_value.o

如此一来,我们的 makefile 中就至少有两个目标,分别是 main 与 clean。如果想建立 main,输入 make main;如果想清除,输入 make clean。如果想先清除目标文件再编译 main 文件,可以输入 make clean main,如下所示:

$ make clean main
rm -rf main main.o haha.o sin_value.o cos_value.o
cc    -c -o main.o main.c
cc    -c -o haha.o haha.c
cc    -c -o sin_value.o sin_value.c
cc    -c -o cos_value.o cos_value.c
gcc -o main main.o haha.o sin_value.o cos_value.o -lm

我们可以再通过 shell 脚本的 变量 来简化 makefile:

$ vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o

main: $(OBJS)
    gcc -o main $(OBJS) $(LIBS)

clean:
    rm -rf main $(OBJS)

变量的基本语法为:

  1. 變數與變數內容以 = 隔開,同時兩邊可以具有空格;
  2. 變數左邊不可以有 <tab> ,例如上面範例的第一行 LIBS 左邊不可以是 <tab>;
  3. 變數與變數內容在 = 兩邊不能具有 :
  4. 在習慣上,變數最好是以 大寫字母 為主;
  5. 運用變數時,以 ${變數}$(變數) 使用;
  6. 在該 shell 的環境變數是可以被套用的,例如提到的 CFLAGS 這個變數!
  7. 在命令行模式也可以給予變數。

由于 gcc 在进行编译时,会主动读取 CFLAGS 环境变量,所以,可以直接在 shell 定义出这个环境变量,也可以在 makefile 文件里定义,更可以在命令行中提供,例如:

// method 1
$ CFLAGS="-Wall" make clean main

// method 2
$ vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall

main: $(OBJS)
    gcc -o main $(OBJS) $(LIBS)

clean:
    rm -rf main $(OBJS)

环境变量取用的规则是这样的:

  1. make 命令行后面加上的环境变量优先;
  2. makefile 里指定的环境变量第二;
  3. shell 原有的环境变量第三。

此外,还有一些特殊的变量是需要了解的:

$@:表示当前的目标(target),所以,也可以将 makefile 改成:

$ vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall

main: $(OBJS)
    gcc -o $@ $(OBJS) $(LIBS) # 这个$@就是main

clean:
    rm -rf main $(OBJS)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值