如何发现makefile
admin
2023-08-02 12:00:08
0

默认的情况下,make命令会在当前目录下按顺序找寻文件名为"GNUmakefile"、"makefile"、"Makefile"的文件,找到了解释这个文件。

在这三个文件名中,最好使用"Makefile"这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好不要用"GNUmakefile",这个文件是GNU的make识别的。

target : dependents_1 dependents_2 ... dependents_n

command_1

command_2

command_3

(1)makefile中的变量赋值方式

makefile中定义的变量, 赋值中还有其他引用变量,makefile会将变量逐级展开

赋值操作符前后可以有若干空格

1> 操作符 =

递归展开引用变量, 直到找到被引用的变量的 最新值(搜索makefile)

var = I love

variable = linux

var += $(variable)

variable = magic

all:

@echo $(var)

输出:

I love magic

2> 操作符 :=

递归展开引用变量, 只找到该变量赋值 之前 , 最新的引用变量的值 (不搜索整个makefile)

m := mm

x := $(m)

y := $(x) bar

x := later

all:

@echo  $(x)  $(y)

输出:

$x ---> later

$y ---> mm bar

(若将 y:=  改成 y= ,$y值为:later bar)

3>操作符 +=

可以通过+=为已定义的变量添加新的值

当变量从前没有被定义过, +=和=是一样的,它定义一个递归展开的变量,但是,当变量已经有定义的时候,+=只是简单的进行字符的添加工作。

如果起初你用:=定义变量,那么+=只是利用变量的当前值进行添加

如果起初用=定义变量,+=的行为就变得有些古怪,它并不会在使用+=的地方马上进行变量展开,而是会把展开工作推后,直到它找到最后变量的定义,这和=定义变量的行为是类似的

4>操作符 ?=   (不奏效)

赋默认值,如果没有初始化该变量,就给它赋上默认值。如:

ARCH=arm

ARCH ?= i386

all:

    @echo $(ARCH)

输出:

arm

ARCH=

ARCH ?= i386

all:

    @echo $(ARCH)

输出:

i386

(2)makefile主要预定变量

$*不包括扩展名的目标文件名称

所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件

%HTML_CONTENT%lt;第一个依赖文件的名称

$?所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚

$@目标的完整名称

$^所有的依赖文件,以空格分开,不包含重复的依赖文件

$%如果目标是归档成员,则该变量表示目标的归档成员名称

(3)makefile中内定函数使用

1>  wildcard

2>  patsubst

3>  notdir

SUB_DIR=./ locate order_maker scheduler transmit

INCLUDE = $(foreach temp,$(SUB_DIR), -I./$(temp))

SRC = $(foreach temp,$(SUB_DIR), $(wildcard $(temp)/*.cpp))

OBJS = $(foreach temp,$(SRC), $(patsubst %.cpp,%.o,$(temp)))

OBJS_LINK = $(foreach temp,$(OBJS), obj/$(patsubst %.cpp,%.o,$(notdir $(temp))))

(4)makefile中的文件搜索路径

在makefile中,可以通过给 VPATH 赋值来设置规则中目标文件和依赖文件的搜索目录。

Make首先搜索当前目录,如果未找到依赖的文件,make将按照VPATH中给的目录依次搜索VPATH对makefile中所有文件都有效。

如:

VPATH:=/c/ming \

      /c/ming/head

也可以使用指令 vpath ,与VPATH在使用上的区别是:vpath可以给不同类文件指定不同的搜索目录。

如:

vpath %.c /c/ming

vpath %.h /c/ming/head

vpath %.c 表示清除所有vpath对%.c设置的搜索目录

上一篇:gcc编译选项

下一篇:GCC 警告选项 -Werror

相关内容

热门资讯

张嘉益、海清、任素汐,他们的本... 今天(7月10日)起,电视剧的演员署名正式告别艺名,使用法定姓名,并按笔画排序。观众或将重新认识一批...
打着“产学官合作”旗号,日本加... 据凤凰卫视援引共同社报道,日本政府初步决定最快2030年度建设军民两用技术研究据点。据报道,这项安排...
多名艺人集体公开讨薪、追债,太... 【文/观察者网 阮佳琪】7月9日,“多名艺人发声讨债”词条登上微博热搜。当天凌晨,通过《星动亚洲》等...
LG立式空调通电后跳闸 1、可能是电路板上面的压敏电阻坏了。2、如果其他功能如送风不跳闸,就是室外机风机或压缩机有问题。3、...
万能空调遥控器lg代码 万能空调遥控器是一种兼容多种品牌型号的遥控器,通过简单的设定,就能够使用它来控制您的空调。下面是万能...
lg空调遥控器有显示但打不开空... 1、lg空调控制器上的拨钮未拨到适当位置,如拨到较高的位置上,房间内的温度尚未达到空调设定温度上限值...
立式空调不制冷的原因及解决办法 原因可能是空调的制冷剂不足,可以给空调加氟解决;原因可能是空调的室内外传输系统出现短路的状况,可以检...
变频空调拆装会损坏电路板吗 不会。1、拆卸室内机需要注意,拆卸过程中注意防止冷凝水进入线路板很重要。2、拆卸室外机方面需要清楚,...
公共场所的艺术品吓到了人,谁的... 澎湃新闻记者 陆林汉 黄松最近,上海东方绿舟的48个“池中人”玻璃雕像因“有点吓人”被不少网友吐槽,...
一枚炸弹、一名女杀手,2.2亿... ·左图:瓦季姆·叶尔莫拉耶夫;右图:排爆小组在爆炸现场处置。(盖蒂图片社)当地时间6月29日,摩纳哥...