makefile——小试牛刀
//a.h,包含头文件stdio.h,并且定义一个函数print
#include<stdio.h>
void print();
//b.c,包含头文件a.h,然后就可以写print函数的内容了
#include"a.h"
void print(){
printf("who are you\n");
}
//c.c,包含头文件a.h,调用print函数
#include"a.h"
int main(){
print();
return 0;
}
下面是Makefile 固定命名,记住这些文件全部在同一文件夹下,全部编写完成后,执行make命令就会自动执行Makefile了,
hello:c.o b.o //其中hello是目标文件,c.o和b.o是依赖文件,需要这两个文件才能生成hello,因为现在还没有c.o文件,所以跳到c.o:c.c a.h那里,然后执行gcc -c c.c 执行完成后又返回该条语句,发现也没有b.o,所以跳到b.o:b.c a.h
gcc -o hello c.o b.o //这个是shell命令
c.o:c.c a.h
gcc -c c.c //其中gcc -c c.c是指编译生产c.o(改成gcc -o c.o c.c会报错)
b.o:b.c a.h
gcc -c b.c
clean: //执行make clean会执行下面的语句
rm hello c.o b.o
执行效果如下
[root@bogon bp]# ls
a.h b.c c.c Makefile
[root@bogon bp]# make
gcc -c c.c
gcc -c b.c
gcc -o hello c.o b.o
[root@bogon bp]# ls
a.h b.c b.o c.c c.o hello Makefile
[root@bogon bp]# ./hello
who are you
改进后的方法,只需要修改Makefile
[root@bogon bp]# cat Makefile
objects=c.o b.o 相当于C语言的宏定义变量
hello:c.o b.o
gcc -o hello $(objects)
c.o:c.c a.h
gcc -c c.c
b.o:b.c a.h
gcc -c b.c
clean:
rm hello $(objects)
我们还能更精简这个过程,也是只修改Makefile
[root@bogon bp]# make
cc -c -o c.o c.c
cc -c -o b.o b.c
gcc -o hello c.o b.o
[root@bogon bp]# ls
a.h b.c b.o c.c c.o hello Makefile
[root@bogon bp]# ./hello
who are you
[root@bogon bp]# cat Makefile
objects=c.o b.o
hello:c.o b.o
gcc -o hello $(objects)
$(bojects):a.h 因为c.o和b.o都依赖a.h
c.o:c.c 可以省略掉gcc
b.o:b.c
clean:
rm hello $(objects)
[root@bogon bp]#
上面是我自己总结写的,原文如下http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html
进行内核编译的时候make会多两个选项,-C和-M.
其中-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。
makefile——小试牛刀的更多相关文章
- 说说Makefile那些事儿
说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...
- Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)
在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点.上章是使用了Microsof ...
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- 编写简单的Makefile文件
makefile中的编写内容如下: www:hello.c x.h gcc hello.c -o hello clean: rm hello www:hello.c x.h 表示生成www这个文件需 ...
- 简单编写Makefile
相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...
- [转]Linux中configure/makefile
本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...
- Linux内核配置、编译及Makefile简述
Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...
- make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”
默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”.“makefile”.“Makefile”. ...
- 实例:对2个Makefile的备注
实例1:Makefile编译链接简单.c函数 example.c Makefile exe: example.c gcc example.c -o exe clean: rm exe 执行效果: 实例 ...
随机推荐
- Centos7扩展存储空间
1.在关机状态下,在Vm里面设置系统大小到需要的数值 :2.使用root权限登陆linux,df -h查看系统情况: [root@cratedb-hk-01 ~]# df -h 文件系统 容量 已用 ...
- elk之kibana
环境: centos7 jdk8 参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.htmlhttp:// ...
- string使用方法
转载自:https://blog.csdn.net/tengfei461807914/article/details/52203202 使用场合: string是C++标准库的一个重要的部分,主要用于 ...
- <Yarn><Node Labels>
Go through official docs For the official docs of Yarn node label, plase see here. Overview Node lab ...
- ueditor 设置高度height. ue.setHeight(400); 设置宽度 width
1.引入的文件: <script type="text/javascript" src="../../dist/ueditor1_4_3-utf8-php/uedi ...
- 深入浅出 - vue变化侦测原理
废话真多!!! 其实在一年前我已经写过一篇关于 vue响应式原理的文章,但是最近我翻开看看发现讲的内容和我现在心里想的有些不太一样,所以我打算重新写一篇更通俗易懂的文章. 我的目标是能让读者读完我写的 ...
- win系统 Mysql 5.7.19 zip 安装
1 安装运行环境 VC++ 2013 2 下载 https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 3 解压 4 ...
- python day07作业
- 解析XML技术
转载:http://developer.51cto.com/art/200903/117512.htm XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交 ...
- SEGMENTATION FAULT IN LINUX 原因与避免
https://www.cnblogs.com/no7dw/archive/2013/02/20/2918372.html