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

LINUX教程:Makefile简单入门教程

发布时间:2020-12-13 17:37:19 所属栏目:Linux 来源:网络整理
导读:《LINUX教程:Makefile简单入门教程》要点: 本文介绍了LINUX教程:Makefile简单入门教程,希望对您有用。如果有疑问,可以联系我们。 一、简介 make命令执行时,必要一个 Makefile 文件,以告诉make命令必要怎么样的去编译和链接程序(简单将:管理工程的文件,

《LINUX教程:Makefile简单入门教程》要点:
本文介绍了LINUX教程:Makefile简单入门教程,希望对您有用。如果有疑问,可以联系我们。

一、简介

make命令执行时,必要一个 Makefile 文件,以告诉make命令必要怎么样的去编译和链接程序(简单将:管理工程的文件,决定先编译哪些文件,编译顺序).

二、编写规矩:

目标1:目标依赖? 然后回车+tab键
?敕令;

目标2:目标依赖? 然后回车+tab键
?敕令;
...

目标n:目标依赖? 然后回车+tab键
?敕令;

注意:命令必需是tab键开头的.

三、Makefile演进
1、一个项目有main.c/a.c/a.h/b.c/b.h五个文件;main.c包括a.h和b.h并使用相关函数;然后建立一个新的Makefile文件,内容如下:
main:a.o b.o
?gcc -o main a.o b.o?
a.o:a.c
?gcc -c a.c -o a.o?
b.o:b.c
?gcc -c b.c -o b.o

2、Makefile升级1
采用makefile变量:想用就用,没有类型,不需要定义(引用变量使用$(obj)来包含更多.o文件)
办法:obj:=a.o b.o
那么上面的Makefile程序升级如下:
obj:=a.o b.o
main:$(obj)
?gcc -o main a.o b.o?
a.o:a.c
?gcc -c a.c -o a.o?
b.o:b.c
?gcc -c b.c -o b.o

3、Makefile升级2
经过以上两个makefile的编译,项目执行是成功的,但是如果main.c需要引用更多文件中的函数时,是否要填写那么多的编译命令吗?显然这个办法不可取.
改进:makefile特殊变量和自动推导功能
知识点说明:
$@? 代表目标名,
$^? 代表依赖文件
%? 代表任意字符
%.o? 代表任意.o文件
%.c? 代表任意.c文件

以上Makefile进级如下:
obj:=a.o b.o
main:$(obj)
?gcc -o main $(obj)?
%.o:%c? ? ? #注释:模式通配,自动将.c文件编译成.o文件
?gcc -o $@ -c $^? ? #注释:通配符
clean:
?rm -rf *.o main

4、Makefile升级3
exe=main? ? ? #注释:最后的编译成果名字
obj:=main.o a.o b.o c.o? ?#注释:依赖文件
all:$(obj)
gcc -o $(exe) $(obj)
%.o:%.c
gcc -c $^ -o $@
clean:
rm -rf $(obj) $(exe)

以上程序看似没有什么问题的,但是clean有点瑕疵,要是也有一个文件叫clean那怎么办?如果make clean就没方法执行这条命令.

5、Makefile升级4
使用伪目标.PHONY来办理clean瑕疵问题,升级Makefile如下:
exe:=main
obj:=main.o a.o b.o c.o
all:$(obj)
?gcc -o $(exe) $(obj)
%.o:%.c
?gcc -c $^ -o $@
.PHONY:clean? ? ?#注释:声明clean是伪目标
clean:
?rm -rf $(obj) $(exe)

注释#.PHONY:clean声明伪目标,避免当前目录存在名字为clean文件的时候命令不克不及执行的情况

6、Makefile升级5
有时使用的编译器可能是g++、gcc甚至是arm-linux-gcc.为了方便统一管理,最好开头定义一个变量来代表编纂器,然后在gcc命令上变成$(CC):
Makefile升级如下:
CC:=gcc? ? #注释:定义一个变量,表示当前编纂器为gcc
exe:=main
obj:=main.o a.o b.o c.o
all:$(obj)
?$(CC) -o $(exe) $(obj)?
%.o:%.c
?$(CC) -c $^ -o $@
.PHONY:clean
clean:
?rm -rf $(obj) $(exe)

基本上现在的Makefie可以编辑很多普通的程序了.秩序要对Makefile的文件名适当稍加修改即可.如果在比拟大型的程序里面写Makefile会相对知识点多一点,比如添加静态库、动态库、线程等等;后续再做升级.

保举一本书:GNU make中文手册(翻译整理:徐海兵)

本文永远更新链接地址

更多LINUX教程,尽在编程之家PHP学院专栏。欢迎交流《LINUX教程:Makefile简单入门教程》!

(编辑:李大同)

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

    推荐文章
      热点阅读