多个源文件进行编译,即 makefile 的编写
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 的编写相关推荐
- 【Android开发】之编译脚本Makefile编写
摘抄自:https://blog.csdn.net/SoaringLee_fighting/article/details/84037468 略加部分修改完善. 1.NDK编译C/C++ Native ...
- 拓扑排序:如何确定代码源文件的编译依赖关系
什么是拓扑排序? 由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序 拓扑排序有何应用? 我们知道,一个完整的项目往往会包含很多代码源文件.编译器在编译整个项目的时候,需要按照依赖关 ...
- 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )
文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...
- Java源文件的编译、下载、解释和执行
一.Java源文件的编译.下载.解释和执行 1. 执行java程序的步骤: Java源文件(程序员编写的*.java文件),使用javac编译生成*.class文件(字节码文件),然后使用java解释 ...
- linux中命令对c文件进行编译,Linux下C语言编译基础及makefile的编写
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 源程序编译 Makefile的编写 程序库的链接 程序的调试 头文件和系统求助 1.源程序的编译 在L ...
- PX4编译文件 Makefile 剖析
PX4编译文件 Makefile 剖析 当我们执行 cd Firmware进入PX4源码目录, 然后make 的时候,我们会看到一串输出基本如下(第一次编译会有更多的输出) [ 2%] Built t ...
- java应用程序如何编译运作_开发Java应用程序的基本步骤是: 1 编写源文件, 2.编译源文件, 3.运行程序。_学小易找答案...
[判断题]Java源文件中只能有一个类. [简答题]任务32:开关电源PCB 设计.docx [多选题]企业的收入具体表现为一定期间: [简答题]任务33:CPLD逻辑电路自制元件与封装.docx [ ...
- c语言中源文件未编译是什么,源文件未编译什么意思
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 源文件未编译,即在运行前要对源代码进行编译链接,然后才能运行.编译利用编译程序从源语言编写的源程序产生目标程序的过程,也是用编译程 ...
- Dev C++ 运行出现:源文件未编译
新安装的Dev C++ 编写一个最简单的hello world 程序 #include <stdio.h> int main() {printf("hello world!\n& ...
- 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 同时报错源文件未编译 我的原因是 ...
最新文章
- aes key长度_原创 | 浅谈Shiro反序列化获取Key的几种方式
- python3 打印完整报错信息 以flask 为例
- 云端大数据实战记录-大数据推荐
- arduinohanshu_Arduino 常用函数参考文档
- Ghost 2.16.3 发布,基于 Markdown 的在线写作平台
- [SQL Server玩转Python] 一.安装环境及T-SQL调用python脚本
- 《团队作业第三、第四周》五小福团队作业--Scrum 冲刺阶段--Day6
- 蓝牙耳机声音一顿一顿的_这次让世界听听我们的声音——声阔SoundcoreLiberty2Pro蓝牙耳机...
- 喵喵遇到java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter怎么办
- Mac给Sublime Text 配置Python3开发环境
- cognos transformer 建一个85w数据的cube所用的时间,接优化
- springmvc源码解析MvcNamespaceHandler之mvc:default-servlet-handler/
- nginx的学习笔记,第四记。
- 《色彩解答》系列之二 色彩比例
- android手机读代码的app,android代码阅读器
- LeetCode1818:绝对差值和
- 怎么安装python的数据库5.7.28_Windows下mysql-5.7.28下载、安装、配置教程
- 互联网之于人类社会进化的意义
- 致远oa系统unix 服务器,致远oa如何设置服务器地址
- 适用于主流浏览器导出Excel表格的代码