Makefile之变量小解

本文介绍了Makefile中的变量定义与使用方法,包括自定义变量、自动变量及特殊变量的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  变量对每一个程序员再熟悉不过,每一个编程语言都有自己的变量,Makefile也不例外,下面就让我们来看一下Makefile怎么定义和使用变量的吧!

这里我们先写一个例子:

头文件:apute.h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 

第一个C文件foo.c,根据地址打印传递的字符串

#include "apute.h"

void foo(char * str)
{
 printf("str is %s\n",str);
}

 

第二个C文件bar.c,根据传递的两个变量计算之和并打印

#include "apute.h"

void bar(int a, int b)
{
 printf("a+b = %d\n",a+b);
}

 

第三个C文件main.c,传递参数,调用上述两个函数:

int main()
{
 int a,b;
 a = 11;
 b = 22;
 char *str = "Hello!";
 foo(str);
 bar(a,b);
 return 0;

}

 

Makefile:

执行结果:

从上述例子我们可以看到,一个变量的定义很简单,就是一名字(变量名)后面跟上一个等号

然后在等号的后面放这个变量所期望的值。对于变量的引用,则需要采用$()或者${}这种模式

在这里我们引用了变量CC来指定编译器,引入了objects来保存.o文件,当然你也可以引入更多的变量,比如

RM=rm,用于指定删除文件的命令等等。这样引入变量,加入我们需要更改编译器,只需更改变量赋值的地方,

不必更改每一个地方,非常方便。

 

接下来我们看一下自动变量:

在我们编写Makefile,有些时候目标和先的名会在规则的命令中多出现,而且,如果改变目标或是赖文件

命令中就得全部跟着这就需要用到Makefile中的动变量,它们包括:

  • $@用于表一个规则的目标。我们的一规则中有个目标时$@所指的其中任何造成命令被运行的目标。
  • $^则表示的是规则中的所有先择条件。
  • $<表示的是规则中的第一个先决条件
依旧是写一个小例子来测试一下:

 

执行结果是:

这里我们可以轻松的验证自动变量$@,$^,$<所指何意。

现在我们使用自动变量改写一下第一个例子,

 

依旧OK!这样看着多少显着有些专业点。

 

Makefile中还有一些特殊变量,第一个就是 MAKE 变量,它表示的是 make 命令名是什么。当我们需要在 Makefile 中调用另一个

Makefile 时需要用到这个变量,采用这种方式,有利于写一个容易移植的 Makefile。

 

执行结果:

MAKE = make

第二个MAKECMDGOALS,它表示当前用户输入的make目标是什么

执行结果:

从测试结果看来,MAKECMDGOALS 指的是用户输入的目标,当我们只运行 make 命令时, 虽然根据Makefile 的语法,

第一个目标将成为缺省目标,即all 目标,但MAKECMDGOALS 仍然是空,而不是 all,这一点我们需要注意。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值