Makefile中的变量

本文介绍了Makefile中的重要变量$@,$^,$<的含义及其在编译过程中的应用。同时,讲解了vpath指令的三种用法,用于指定依赖文件的搜索目录。此外,还提到了origin函数,用于查询变量的来源,包括undefined、environment、default和file四种情况。

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

Makefile有三个非常有用的变量。分别是$@,$^,$<代表的意义分别是: 

$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。 

main:main.o mytool1.o mytool2.o 
gcc -o $@ $^ 

main.o:main.c mytool1.h mytool2.h 
gcc -c $< 

mytool1.o:mytool1.c mytool1.h 
gcc -c $< 

mytool2.o:mytool2.c mytool2.h 
gcc -c $< 

==================================================================================================

它的使用方法有三种:

    1vpath <pattern> <directories>

    为符合模式<pattern>的文件指定搜索目录<directories>

    2vpath <pattern>

    清除符合模式<pattern>的文件的搜索目录。

    3vpath

    清除所有已被设置好了的文件搜索目录。

vapth使用方法中的<pattern>需要包含“%”字符。“%”的意思是匹配零或若干字符,例如,“%.h”表示所有以“.h”结尾的文件。<pattern>指定了要搜索的文件集,而<directories>则指定了<pattern>的文件集的搜索的目录。例如:

    vpath %.h ../headers

该语句表示,要求make在“../headers”目录下搜索所有以“.h”结尾的文件。(如果某文件在当前目录没有找到的话)

========================================================================================

bigoutput littleoutput : text.g
            generate text.g -$(subst output,,$@) > $@

上述规则等价于:

    bigoutput : text.g
            generate text.g -big > bigoutput
    littleoutput : text.g
            generate text.g -little > littleoutput

========================================================================================

origin
函数的作用是告诉你变量是哪里来的,其出生状况如何,他并不改变变量。

函数语法:
$(origin <variable>)
<variable> 为变量的名字,而不是引用,所以一般没有"$"字符在前。

origin 函数通过返回值来告诉你 <variable> 的出生情况。下面用实例说明:

  1. 当从来未定义过该变量时,origin 函数返回 "undefined" 。
    如下面的 Makefile 代码:
    all:
    @echo $(origin V)

运行输出:
$ make
undefined

  1. 如果该变量为环境变量,那么返回 "enviroment" 。
    如下面的 Makefile 代码:
    all:
    @echo $(origin USER)

运行输出:
$ make
environment
其中 USER 这个变量为系统定义的当前用户,使用 env 命令可以看到。

  1. 如果变量是个默认定义,那么返回 "default"。
    如下面的 Makefile 代码:
    all:
    @echo $(origin CC)

运行输出:
$ make
default

  1. 如果一个变量被定义在 Makefile 文件中,那么返回 "file" 。
    如下面的 Makefile 代码:
    V := 1
    all:
    @echo $(origin V)

运行输出:
$ make
file

  1. 如果变量来自命令行,那么返回 "command line" 。
    如下面的 Makefile 代码:
    all:
    @echo $(origin MyVar)



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值