makefile的好处是防止源文件的重复编译

比如有好多个源文件,某天对其中一个源文件进行修改,如果不写makefile的话,需要将整个工程的所有文件重新编译一遍,非常麻烦,有了makefile,说明了每个源文件的依附关系,当某个源文件改变的时候只需重新编译一下关联的源文件就好。

例如:有以下文件

one.h

one.c

two.h

two.c

main.c

main.c 中引入one.h 和two.h两个头文件,one.c two.c 分别实现两个头文件中定义的函数

有两种方式编译运行该程序,

一:手动单独编译

gcc -c one.c

gcc -c two.c

gcc -c main.c

gcc -o main main.o one.o two.o

./main

二:makefile

那么只需在任何一个文本编辑器里面写下如下命令,并保存为makefile

main:main.o one.o two.o

tab键gcc(或者cc)-o main main.o one.o two.o

main.o:main.c one.h two.h

tab键gcc(或者cc)-c main.c

one.o:one.c one.h

tab键gcc(或者cc)-c one.c

two.o:two.c two.h

tab键gcc(或者cc)-c two.c

这些源文件都需要在同一个目录下,并且在main.c中引入one.h 和two.h的时候要用"one.h" "two.h"不要用<>否则编译器会到系统类库文件中去找,是找不到的。

然后在同一目录的终端下,输入make命令,那么编译就开始了,没有什么错误的话,执行./main就可以让你的程序跑起来了。

还可以对makefile进行精简:

首先有三个符号:

1 $@ 代表目标文件

2 $< 代表第一个文件

3$^ 代表所有依赖文件

所以上面命令可以精简为:

main:main.o one.o two.o

tab键gcc(或者cc)-o $@ $^

main.o:main.c one.h two.h

tab键gcc(或者cc)-c $<

one.o:one.c one.h

tab键gcc(或者cc)-c $<

two.o:two.c two.h

tab键gcc(或者cc)-c $<

以上makefile还可以精简:

一个新的符号:.c.o

该符号自动搜索相关联的源文件和头文件

于是makefile还可以写为:

main:main.o one.o two.o

tab键gcc(或者cc)-o $@ $^

.c.o: 
tab键gcc(或者cc) $<

最好在加上clean命令,将生成的目标文件和执行文件删除,遵守优雅简洁原则,呵呵,方便再次编译

clean:

ab键gcc(或者cc)rm main main.o one.o two.o

makefile的格式大家要记住了,至于问什么这样写,只能说这是标准,makefile还有很多高深的用法,以后在逐渐去学习。

多个源文件进行编译,即 makefile 的编写相关推荐

  1. 【Android开发】之编译脚本Makefile编写

    摘抄自:https://blog.csdn.net/SoaringLee_fighting/article/details/84037468 略加部分修改完善. 1.NDK编译C/C++ Native ...

  2. 拓扑排序:如何确定代码源文件的编译依赖关系

    什么是拓扑排序? 由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序 拓扑排序有何应用? 我们知道,一个完整的项目往往会包含很多代码源文件.编译器在编译整个项目的时候,需要按照依赖关 ...

  3. 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )

    文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...

  4. Java源文件的编译、下载、解释和执行

    一.Java源文件的编译.下载.解释和执行 1. 执行java程序的步骤: Java源文件(程序员编写的*.java文件),使用javac编译生成*.class文件(字节码文件),然后使用java解释 ...

  5. linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写

    这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...

  6. PX4编译文件 Makefile 剖析

    PX4编译文件 Makefile 剖析 当我们执行 cd Firmware进入PX4源码目录, 然后make 的时候,我们会看到一串输出基本如下(第一次编译会有更多的输出) [ 2%] Built t ...

  7. java应用程序如何编译运作_开发Java应用程序的基本步骤是: 1 编写源文件, 2.编译源文件, 3.运行程序。_学小易找答案...

    [判断题]Java源文件中只能有一个类. [简答题]任务32:开关电源PCB 设计.docx [多选题]企业的收入具体表现为一定期间: [简答题]任务33:CPLD逻辑电路自制元件与封装.docx [ ...

  8. c语言中源文件未编译是什么,源文件未编译什么意思

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 源文件未编译,即在运行前要对源代码进行编译链接,然后才能运行.编译利用编译程序从源语言编写的源程序产生目标程序的过程,也是用编译程 ...

  9. Dev C++ 运行出现:源文件未编译

    新安装的Dev C++ 编写一个最简单的hello world 程序 #include <stdio.h> int main() {printf("hello world!\n& ...

  10. devc++ value of xxx too large for field of 4 bytes at xxx 并且源文件未编译

    Error: value of 0000000254320bf7 too large for field of 4 bytes at 0000000000000093 同时报错源文件未编译 我的原因是 ...

最新文章

  1. aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式
  2. python3 打印完整报错信息 以flask 为例
  3. 云端大数据实战记录-大数据推荐
  4. arduinohanshu_Arduino 常用函数参考文档
  5. Ghost 2.16.3 发布,基于 Markdown 的在线写作平台
  6. [SQL Server玩转Python] 一.安装环境及T-SQL调用python脚本
  7. 《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day6
  8. 蓝牙耳机声音一顿一顿的_这次让世界听听我们的声音——声阔SoundcoreLiberty2Pro蓝牙耳机...
  9. 喵喵遇到java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter怎么办
  10. Mac给Sublime Text 配置Python3开发环境
  11. cognos transformer 建一个85w数据的cube所用的时间,接优化
  12. springmvc源码解析MvcNamespaceHandler之mvc:default-servlet-handler/
  13. nginx的学习笔记,第四记。
  14. 《色彩解答》系列之二 色彩比例
  15. android手机读代码的app,android代码阅读器
  16. LeetCode1818:绝对差值和
  17. 怎么安装python的数据库5.7.28_Windows下mysql-5.7.28下载、安装、配置教程
  18. 互联网之于人类社会进化的意义
  19. 致远oa系统unix 服务器,致远oa如何设置服务器地址
  20. 适用于主流浏览器导出Excel表格的代码

热门文章

  1. mouse without borders 一套键鼠控制多台设备
  2. 使用FFMpeg 提取MKV文件中的字幕
  3. git 终端配置mac(udacity)
  4. 二类电商积分商城,积分兑换商城源码,免登陆积分兑换商城系统
  5. 全屏动态滑稽网站HTML源码
  6. 【Python计量】statsmodels对虚拟变量进行回归
  7. 用react制作半圆形进度条
  8. 计算机桌面上的微信图标不显示不出来怎么办,怎么隐藏电脑上微信的图标显示不出来怎么办...
  9. 目标客户画像_分析目标人群画像的5个步骤
  10. Eucalyptus(桉树)客户群体