【参加CUDA线上训练营】--Makefile基本介绍与编写规则

2.1 什么是Makefile

  1. 一个企业级项目,通常会有很多源文件,有时也会按功能、类型、模块分门别类的放在不同的目录中,有时候也会在一个目录里存放了多个程序的源代码。这时,如何对这些代码的编译就成了个问题。Makefle就是为这个问题而生的,它定义了一套规则,决定了哪些文件要先编译,哪些文件后编译,哪些文件要重新编译。makefile就像一个Shell脚本一样,可以实现“自动化编译”,一旦写好,只需要一个make命令,完全自动编译,极大的提高了软件开发的效率。

  1. 整个工程通常只要一个make命令就可以完成编译链接,甚至更复杂的功能。可以说,任何一个Linux源程序都带有一个Makefile文件。如果能掌握Makefile文件的编写方法,就能脱离可视化编译器,使用编译链工具编译出所需的目标文件。

2.2 Makefile的优点

  1. 管理代码的编译,决定该编译什么文件,编译顺序,以及是否需要重新编译;

  1. 节省编译时间。如果文件有更改,只需重新编译此文件即可,无需重新编译整个工程;

  1. 一劳永逸。Makefile通常只需编写一次,后期就不用过多更改。

2.3 Makefile的编写规则

2.4 创建工程目录&编写makefile内容

2.6 makefile的工作原理

2.7 进入工程目录makefile_tutorial当中执行make命令: 使用此命令即可按预定的规则生成目标文件

2.8 运行程序

2.9 Makefile的变量使用

其实,我们可以像 C 一样,用一个符号来代替一个字符串内容

我们用 OBJ 代替 main.o add.o sub.o mul.o div.o 这些文件。注意:在引用变量时,需要用 $() 来包括住变量

2.10 清空编译文件

我们发现每次编译的过程中都会产生一大堆中间文件,这令人感到杂乱,每个 Makefile 中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。

.PHONY 意思表示 clean 是一个“伪目标”,在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。clean 的规则不要放在文件的开头,不然,这就会变成make 的默认目标,一般我们都会放在文件结尾处。

输入命令行:make clean 就可以清除对应的文件了

进到example01中执行test,输出hello world;然后我们删除这个可执行文件test,再执行make,然后就会重新编译test.c,生成test,然后再运行test,就会出现test的运行结果。

CC = gcc
main: main.c tool.o bar.o
        $(CC) main.c tool.o bar.o -o main
tool.o: tool.c
        $(CC) -c tool.c
bar.o: bar.c
        $(CC) -c  bar.c
clean:
        rm *.o main


【 main的生成是要依赖main.c tool.o和bar.o】
【 $(CC) main.c tool.o bar.o -o main 前三个文件链接成main文件】
【 $(CC) -c tool.c 编译tool.c文件生成tool.o文件】
【 rm *.o main 把中间生成的文件和上一个生成的可执行文件删掉,要不会影响下一次编译】
【运行的话就输入./main命令】
【如果要想执行clean的话,必须输入命令make clean才会把中间结果和之前生成的main一并删掉】

OBJ = main.o add.o sub.o mul.o div.o
CC = gcc
app: $(OBJ)
        $(CC) -o app $(OBJ)
main.o: main.c
        $(CC) -c main.c
add.o: add.c
        $(CC) -c add.c
sub.o:sub.c
        $(CC) -c sub.c
mul.o: mul.c
        $(CC) -c mul.c
div.o: div.c
        $(CC) -c div.c
.PHONY : clean
clean :
        -rm $(OBJ) app    
        
        
app是要生成的目标文件;由$(OBJ)文件生成;

下述链接是makefile的详细讲解

https://blog.csdn.net/kunhe0512/article/details/128623790

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyc强军梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值