浅谈makefile?

在Linux系统中,使用make和makefile能简单明了的理顺各个源文件的关系,极大提高程序开发效率。

makefile作为描述文档一般包含以下几个部分:

1.显式规则

显示规定如何生成目标文件,所依赖的文件及生成的命令等。

2.隐式规则色

Linux系统支持一种基于文件拓展名的隐含规则(即文件名后缀的隐含规则),规定了如何将特定文件名后缀的文件(如.c文件),转换成另一种后缀的文件(如.o文件)。

.c : .o
    $(cc) $(CFLAGS) $(CPPFLSGS) -c -o [email protected] $<

系统拓展名及其含义:

.o:目标文件

.c:源文件

.s:汇编文件

3.宏(变量)定义

makefile允许用简单的宏替换源文件及其编译信息,引用宏时必须在宏变量前加"$"号,如果变量名的长度超过一个字符(一个字符长度等于一个字节),变量要用“()”

4.注释

首行使用“#”便是注释,在makefile文件中要使用注释则需加“/"转义字符

makefile的基本语法规则如下:

目标文件 : 目标所依赖的文件
    command

注意:如果command不和目标文件所在一行时,在command前要加tab键

接下来看个简单的例子:

1.定义一个fun.h头文件

  1 #ifndef _FUN_H
  2 #define _FUN_H
  3 
  4 extern int fun1(void)
  5 extern int fun2(void)
  6 extern int fun3(void)
  7 
  8 #endif

2.定义一个fun.c文件

  1 #include<stdio.h>
  2 int fun1()
  3 {
  4         printf("This is first function!\n");
  5         return 0;
  6 }
  7 
  8 int fun2()
  9 {
 10         printf("This is second function!\n");
 11         return 0;
 12 }
 13 
 14 int fun3()
 15 {
 16         printf("This is third function!\n");
 17         return 0;
 18 }

3.定义一个mian.c文件

1 #include<stdio.h>
  2 #include<stdlib.h>
  3 int main()
  4 {
  5         fun1();
  6         fun2();
  7         fun3();
  8        return 0;
 9 }

那么如何用makefile将几个文件编译连接在一起呢?

我们首先定义一个makefile

[email protected]:~# vim makefile
 1 edit : main.o fun.o
  2         cc -o edit main.o fun.o
  3 mian.o : main.c
  4         cc -c mainn.c
  5 fun.o : fun.c fun.h
  6         cc -c fun.c
  7 clean:
  8         rm fun.o main.o

接着在shell中输入make即可编译

[email protected]:~# make
cc    -c -o main.o main.c
cc -c fun.c
cc -o edit main.o fun.o

最后运行:

[email protected]:~# ./edit
This is first function!
This is second function!
This is third function!
时间: 2024-10-29 19:06:11

浅谈makefile?的相关文章

浅谈Linux下Makefile编写

浅谈Linux下Makefile的编写 前言:本文简要介绍Makefile文件的编写规范,结合具体项目中的应用进行讲解. 具体代码地址: https://github.com/AnSwErYWJ/DogFood/blob/master/Makefile 简介 Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作.而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关

浅谈linux--make和makefile

会不会写makefile从侧面能够反映一个人是否具有完成大型工程的能力,虽然我只是渣渣一枚,但是我爱学习呀,所以....所以今天就浅谈一下有关make和makefile文件的基本操作和用法 一.Makefile是一个文件 用传统的c/c++语言编写一个程序,都要经历:编辑-编译-连接,这几个步骤.但是在linux平台下这几个步骤是由我们自己来走,因为makefile关系到了整个工程的编译规则,一个工程的源文件不计其数,按功能,类型模块分在若干个目录下,makefile定义了一系列的规则来指定,那

Web服务器和动态语言如何交互--CGI&amp;FastCGI&amp;FPM浅谈

一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同学习. 一. 首先明确几个概念,以便后续说明 CGI:(Common Gateway Interface)Http服务器与后端程序(如PHP)进行交互的中间层. 工作原理及处理方式(fork-and-execute模式): 1.当Web Server有Request到达 2.fork一个CGI进程或

.net中对象序列化技术浅谈

.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数 据.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.反之,反序列化根据流重新构造对象.此外还可以将对象序列化后保存到本地,再次运行的时候可以从本地文件 中“恢复”对象到序列化之前的状态.在.net中有提供了几种序列化的方式:二进制序列化

浅谈——页面静态化

现在互联网发展越来越迅速,对网站的性能要求越来越高,也就是如何应对高并发量.像12306需要应付上亿人同时来抢票,淘宝双十一--所以,如何提高网站的性能,是做网站都需要考虑的. 首先网站性能优化的方面有很多:1,使用缓存,最传统的一级二级缓存:2,将服务和数据库分开,使用不同的服务器,分工更加明确,效率更加高:3,分布式,提供多台服务器,利用反向代理服务器nginx进行反向代理,将请求分散开来:4,数据库的读写分离,不同的数据库,将读操作和写操作分开,并实时同步即可:5,分布式缓存,使用memc

单页应用SEO浅谈

单页应用SEO浅谈 前言 单页应用(Single Page Application)越来越受web开发者欢迎,单页应用的体验可以模拟原生应用,一次开发,多端兼容.单页应用并不是一个全新发明的技术,而是随着互联网的发展,满足用户体验的一种综合技术. SEO 一直以来,搜索引擎优化(SEO)是开发者容易忽略的部分.SEO是针对搜索(Google.百度.雅虎搜索等)在技术细节上的优化,例如语义.搜索关键词与内容相关性.收录量.搜索排名等.SEO也是同行.市场竞争常用的的营销手段.Google.百度的搜

浅谈html标签

浅谈html各常用标签用法 标题标签:<h1>-<h6>来表示,使标题字体变粗. <br />换行标记 <hr />水平分隔符 &nbsp空格符 &copy版权符 <a href>a标签超链接 href可接链接地址 <p>段落标签<blockquote>引用标签及可用做缩进 <table>表格中的<ul>无序列表<ol>有序列表<dl>自定义列表<row

浅谈二维中的树状数组与线段树

一般来说,树状数组可以实现的东西线段树均可胜任,实际应用中也是如此.但是在二维中,线段树的操作变得太过复杂,更新子矩阵时第一维的lazy标记更是麻烦到不行. 但是树状数组在某些询问中又无法胜任,如最值等不符合区间减法的询问.此时就需要根据线段树与树状数组的优缺点来选择了. 做一下基本操作的对比,如下图. 因为线段树为自上向下更新,从而可以使用lazy标记使得矩阵的更新变的高校起来,几个不足就是代码长,代码长和代码长. 对于将将矩阵内元素变为某个值,因为树状数组自下向上更新,且要满足区间加法等限制

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b