目录
一、单个文件的编译1、写法一:逐个生成.i、.s、.o文件,最后再生成 test执行文件2、 写法二:一步到位,直接通过 test.c 生成 test 执行文件(推荐)3、 Makefile自动清理二、多个文件的编译(同一目录下)三、多个文件的编译(不同目录下)VS中有一键编译+自动运行,Linux也给我们提供了对应的编译方式,虽然不及VS那么便捷,但是相比于手动输入 gcc -o add add.c ,我们一句make就可以搞定
Makefile是一个文件,能够存放上述 gcc -o add add.c 这种编译指令
make是一个命令工具,能够解释Makefile中的指令
要如何编译.c文件,关键就在于Makefile是怎么写的,下面我们主要介绍这两者的使用
一、单个文件的编译
假设我们要编译这么一个test.c文件,我们希望编译生成一个名为test的可执行文件
我们在test.c所在目录下创建一个Makefile文件,这里有两种编译写法
1、写法一:逐个生成.i、.s、.o文件,最后再生成 test执行文件
先一步步向下分析,需要什么依赖文件,然后再一步步生成
编写好以后,我们只需要在命令行输入make,系统就会帮我们自动编译了,同时会生成每一步产生的文件按
2、 写法二:一步到位,直接通过 test.c 生成 test 执行文件(推荐)
Makefile中要写的内容如下
第一行:确定好依赖文件和目标文件。也就是要用依赖文件来生成目标文件
第二行:编译指令。
$@指向第一行的目标文件,表示目标文件test
$^指向第一行的依赖文件,表示依赖文件test.c
-std表示采用的C++标准
接下来我们只需要在命令行输入make,系统就会帮我们编译了,编译成功以后,当前目录下就会多出一个test 执行文件
3、 Makefile自动清理
我们每次开始编译之前,我们最好先清理一下之前生成的执行文件,手动输入 rm test 有点太麻烦了,Makefile只要写入下面的内容,就会自动帮我们清理了
如果我们还希望移除生成的.o 、.s、.i文件,那么第6行只要换成
rm -f test test.o test.s test.i
一般我们make的时候,系统会自动调用,当然也可以手动调用,如
我们会发现之前的test执行文件不见了
二、多个文件的编译(同一目录下)
现在我们有三个文件,分别是test.c、sub.c、sub.h,而且我们要在test.c中调用sub.h中的函数
Makefile中的内容如下:
test执行文件 要依赖 多个文件生成的 .o文件,现在没有 .o文件,所以需要重新生成 .o文件
当前路径下有多个.c文件,我们逐个去写的话,就是
test.o:test.c gcc -c $@ $^ sub.o:sub.c gcc -c $@ $^
但是这样写太复杂了,我们可以选择下面这种写法
%.o: %.c gcc -c $<
%.o:表示目标文件是 .o文件
%.c:表示依赖文件是当前路径下的 .c文件,可以看作是一个集合中放着 test.c sub.c
$< : 展开%.c ,逐个生成对应的 .o文件,比如test.c就会生成对应的test.o、sub.c就会生成对应的
sub.o
现在我们来运行一下
三、多个文件的编译(不同目录下)
现在我们有三个文件,test.c、sub.h、sub.c,但是其中sub.h、sub.c在其目录func_dir 下
Makefile的内容如下:
现在我们来运行一下试试
到此这篇关于Linux自动化构建工具make/Makefile的文章就介绍到这了,更多相关linux自动化构建工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
上一篇:python绘制横竖条形图的方法
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?