Makefile快速入门
来源:互联网 发布:在线课程网络课程 编辑:程序博客网 时间:2024/06/14 16:18
一、先来一个单一文件的例子
1.创建hello.c
#include <stdio.h>int main(){ printf("HelloWorld!\n"); return 0;}
2.编写Makefile
hello : hello.o
cc -o hello hello.o
hello.o : hello.c
cc -c hello.c
clean :
rmhello.o
3.执行make指令,产生可执行文件hello
输出如下:
cc -c hello.c
cc -o hello hello.o
4.可以执行make clean,删除产生的中间文件hello.o
输出如下:
rm hello.o
二、Makefile简单介绍
我们写Makefile主要就是为了编译较大规模的程序,得到可执行文件,然而想要得到可执行文件需要经过
*.c--编译--> *.o --链接--> 可执行文件
即.c经过编译得到.o文件,.o文件是一个中间文件,再对这些中间文件进行链接最终可得到可执行文件。
Makefile书写规则
target ... :prerequisites ...
command
...
...
说明:target就是目标文件,可以是.o文件,也可以是可执行问价,还可以是一个Label(标签)。
prerequisites就是要生成那个target所需要的文件或者是目标。
command就是make需要执行的命令(任意Shell命令)。注意:前面要加tab键,不是空格。
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比 target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则,也就是Makefile中最核心的内容。这是Makefile的主线和核心。
三、再来一个简单的Makefile例子
如有一个工程,含有3个头文件及四个c文件,那为了生成所需的可执行文件,这时的Makefile可以这样写:
test:main.o t1.o t2.o t3.o
gcc –o test main.o t1.o t2.o t3.o
main.o:main.c
gcc –c main.c
t1.o:t1.c t1.h
gcc –c t1.c
t2.o:t2.c t2.h
gcc –c t2.c
t3.o:t3.c t3.h
gcc –c t3.c
clean:
rm test main.o t1.o t2.o t3.o
到这里一个简单的makefile就写好了,把它的名字保存为Makefile就可以了,这时你只要在终端敲一下make,它就自动帮你编译链接了,如果敲入make clean,它将删掉那些中间文件及可执行文件。
四、实战
1.创建一个文件夹calc存放计算器项目
2.创建文件
创建mul.c文件
int mul(int a, intb){ return a * b;}
创建sub.c文件
int sub(int a, intb){ returna - b;}
创建add.c文件
int add(int a, intb){ return a + b;}
创建dive.c文件
int dive(int a,int b){ return a / b;}
创建common.h文件
#ifndef__COMMON_H__#define__COMMON_H__int mul(int a, intb);int sub(int a, int b);int add(int a, int b);int dive(int a, int b);#endif//__COMMON_H__
创建main.c文件
#include<stdio.h>#include"common.h" int main(void){ printf("%d\n", add(5, 3)); return o;}
编写Makefile文件
calc:add.o sub.odive.o mul.o main.o
gcc add.o sub.o dive.o mul.o main.o -o calc
add.o:add.c
gcc -c add.c
sub.o:sub.c
gcc -c sub.c
dive.o:dive.c
gcc -c dive.c
mul.o:mul.c
gcc -c mul.c
main.o:main.c
gcc -c main.c
- Makefile 快速入门
- Makefile快速入门
- Makefile快速入门
- makefile快速入门
- 【Bash百宝箱】Makefile快速入门
- linux下 makefile快速入门
- Linux下Makefile快速编写入门
- Linux下Makefile快速编写入门
- linux成长之路(makefile快速入门)
- Android实战技巧之三十六:Makefile快速入门
- makefile入门
- makefile入门
- makefile入门
- makefile入门
- makefile入门
- MakeFile 入门
- Makefile 入门
- Makefile 入门
- 在Magento页面左边增加分类菜单
- SAP Lumira连接数据库
- InnoDB存储引擎redo log文件——《MySQL技术内幕InnoDB存储引擎》读书笔记
- 黑马程序员————java基础之GUI
- 类集框架3
- Makefile快速入门
- 【门面设计模式】的故事来源(Facade Pattern)
- 移动端滑动加载更多
- [ACM]约瑟夫环
- 一些实用的终端命令
- 最大似然估计(MLE)和最大后验概率(MAP)
- semantic ui 下拉菜单支持全文搜索/添加列表项/更改事件
- 外观模式
- 世界时间UT和协调世界时间UTC