加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Makefile 的知识

发布时间:2020-12-16 10:49:19 所属栏目:百科 来源:网络整理
导读:1. Makefile 语法 ? ? ? ? ? ? ? ? ? ? ? ? ? ?生成的文件(targets):依赖的文件(prerequisites?) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文件如何生成 (recipe) test.o : a.o,b.o,c.o gcc - o a.o b.o c.oa.o: a.c gcc - c a.o a.cb.o: b.

1. Makefile 语法

? ? ? ? ? ? ? ? ? ? ? ? ? ?生成的文件(targets):依赖的文件(prerequisites?)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文件如何生成 (recipe)

test.o : a.o,b.o,c.o
            gcc -o a.o b.o c.o

a.o: a.c
      gcc -c a.o a.c

b.o: b.c
       gcc -c b.o b.c

c.o: c.c
      gcc -c c.o c.c

其中代码前面的空当不是空格而是Tab

?

2.可是这个样子太麻烦了如果有很多的文件会写的很长 所以此时我们需要一些通用服去代表所有的文件

test:a.o b.o
        gcc -o test a.o b.o

%.o: %.c
    gcc -c -o [email?protected] $<

其中 [email?protected] 表示的是目标文件(,o文件)

$<表示的是第一个依赖文件(第一个.c文件)

如果使用$^ 表示所有的依赖文件

test:$^
        gcc -o test a.o b.o

%.o: %.c
    gcc -c -o [email?protected] $<

.PHONY 这个是为了当有其他文件被叫做clean的时候执行不了文件 所以需要加上它

?

3. 立即变量:

? ? ? ? ? ? ? ? ?A? := abc?

4.? 延迟变量: 只是在使用的时候才赋值 只是会得到最后得值

? ? A = $(C)

? ?C= 124

? C= 123

? ?此时A为123

5. append Plus += 不会覆盖原来的值会在后面增加新的值

? ?

6. 函数的运用:

? ? ?A = a b c

? ? ?B = $(foreach f,$(A), $(f).o)

all:

? ? ? ?@echo B = $(B)

把叫A变量里面每个名字叫a b c de文件变成.o的形式

? ??

$(filter patent,text)

在字符串中选择符合patent格式的值

?

?

$(filter-out patent,text)

在字符串中选择不符合patent格式的值

?注意patent 要加%

?

$(wildcard patent)

是否真实存在像patent格式那样的文件

?

$(patsubst patent replacement text)

把text中的patent替换成replacement。。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读