单目录下多文件 makefile编写
makefile很久就接触过了,但是一直没怎么深入的去学习和总结;在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有;知识在于沉淀,这句说的非常好,所以现在把自己理解的东西,记录下来,以便后面查阅;
这篇blog要分享的是在单目录下多文件的makefile编写,首先说明当前目录下有多少文件:fun.h fun.c main.c makefile;其中*.c 文件都要依赖 *.h文件;
首先常规编译:
预处理期:gcc -E -o fun.i fun.c
编译阶段:gcc -S -o fun.s fun.i
汇编阶段: gcc -c -o fun.o fun.s
链接阶段:gcc -o main fun.o main.o
这就是gcc的各个编译阶段(头文件在当前目录下,会直接搜索到),下面用makefile来编译下;
第一版的makefile:
- CC = gcc
- CFLAGS = -g -Wall
- objects = main.o fun.o
- main:main.o fun.o
- $(CC) -o main main.o fun.o
- main.o:main.c
- $(CC) $(CFLAGS) -c main.c -o main.o
- fun.o:fun.c
- $(CC) $(CFLAGS) -c fun.c -o fun.o
- clean:
- rm -rf $(objects) main
上面第一版就是根据gcc命令行凑成的,第二版将会使用makefile的自动推导功能;
比如:fun.o:fun.c
$(CC) $(CFLAGS) -c fun.c -o fun.o
当已知目的文件为 fun.o时,makefile会自动推导出依赖文件为fun.c并且编译规则也会自动推导,所以只需要注明依赖的头文件就可以;可以利用makefile自动推导特点简化为:fun.o:fun.h就可以了;
第二版makefile
- CC = gcc
- CFLAGS = -g -Wall
- objects = main.o fun.o
- main:$(objects)
- $(CC) -o main $(objects)
- main.o:fun.h
- fun.o:fun.h
- clean:
- rm -rf $(objects) main
其实上面的makefile已经写的非常简洁了,如果还需要简单的话可以再简化些:
- CC = gcc
- CFLAGS = -g -Wall
- objects = main.o fun.o
- main:$(objects)
- #$(objects):fun.h //可以有,也可以没有
- PHONY:clean
- clean:
- rm -rf $(objects) main
其中.PHONY是用来说明后面的名称不是一个文件,主要用来区分同名文件(如果有一个文件名为clean文件,那么clean:下的规则就会无效);
转载请注明作者和原文出处,原文地址:http://blog.csdn.net/yuzhihui_no1/article/details/44808441
若有不正确之处,望大家指正,共同学习!谢谢!!!
单目录下多文件 makefile编写的更多相关文章
- 多目录下多文件 makefile编写
前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写: 在做项目时,一般文件都会分几个目录来存放:基本的是 include/ bin/ src/ ...
- Linux下使用shell实现上传linux下某个目录下所有文件到ftp
首先我们需要搞清楚单个文件怎么上传,把这个单文件上传到ftp上的实现命名为一个:upload_to_ftp_command.sh 之后,需要弄清楚怎么实现遍历一个目录下的所有文件的,把这个遍历某个目录 ...
- java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)
首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...
- .net core 读取本地指定目录下的文件
项目需求 asp.net core 读取log目录下的.log文件,.log文件的内容如下: xxx.log ------------------------------------------beg ...
- linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good
linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...
- Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)
文章来源:http://www.cnblogs.com/xfiver/archive/2010/07/07/1772764.html 1. IOException parsing XML docum ...
- PHP 获取指定目录下所有文件(包含子目录)
PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ...
- Python遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例
遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例: #-*- encoding: utf-8 -*- __author__ = 'liudong' import linecache,sys ...
- ftp下载目录下所有文件及文件夹内(递归)
ftp下载目录下所有文件及文件夹内(递归) /// <summary> /// ftp文件上传.下载操作类 /// </summary> public class FTPH ...
随机推荐
- Kill 锁,1222:已超过了锁请求超时时段,
应该是你的表体积很大,处理的时候费事,因为几乎所有数据库操作都需要加或多或少的锁,所以会超时.首先你可以使用select * from sys.sysprocesses where blocked&l ...
- tyvj1039忠诚2
描述 Description 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨, ...
- Fiddler 的几个用法
原文地址:http://wenku.baidu.com/link?url=VGYtzCpGdWzyvGFAIgCVS_KbSh5Oemd4rRYqyJORDchy4jxtEiRNWbp0tqPtlBR ...
- Windows系统基本概念
windows API:被文档化的可以调用的子例程,如CreateProcess 原生的系统服务(执行体系统服务):未被文档化的.可以再用户模式下调用的底层服务,如NtCreateProcess 内核 ...
- jQuery 遍历 json 方法大全
1.for循环: var obj = { "status":1, "bkmsg":"\u6210\u529f", "bkdata& ...
- 用Scertify Professional实现代码审查
用Scertify Professional实现代码审查 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Scertify Professional是一 ...
- Eclipse 将projectBuild Path中引用的jar包自己主动复制到WEB-INF下的lib目录下
在用用 Eclipse进行Java Web开发时,web应用中引用的jar须要复制到WEB-INF下的lib目录下,否则常常出现ClassNotFound异常. 通过以下方法,能够不用手动拷贝jar包 ...
- vsftp虚拟用户登录配置详解
一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...
- struts2 MessageStoreInterceptor 拦截器的使用
MessageStoreInterceptor 拦截器可以把和该 Action 相关的 messages, errors 和 field errors(下称 "消息") 保存到 s ...
- android布局常用属性记录
android布局常用属性记录 http://blog.csdn.net/xn4545945/article/details/7717086这里有一部分别人总结的其余的: align:对齐 par ...