一、make是什么

GNU make是一个工程管理器,专门负责管理、维护较多文件的处理,实现自动化编译。如果一个工程项目中,有成百上千个代码源文件,若其中一个或多个文件进过修改,make就需要能够自动识别更新了的代码,不需要像方法1一样逐个输入编译冗长的命令行,就可以完成最后的编译工作。make执行时,自动寻找makefile(Makefile)文件,然后执行编译工作。因此,我们需要自己编写makefile文件(Makefile与makefile都可以直接被make命令识别,下同。但Linux区分大小写)来管理、维护工程文件,提高实际项目的工作效率。

二、适用什么情况

1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

三、主要过程
 1.设置编译环境 set compile environment
 2.获取要编译的源文件,以及把源文件转换为目标文件 ( 源文件和目标文件) source to obj
 3.将文件编译为目标文件 OBJing
 4.将目标文件链接成可执行文件或(打包为)动态库,或静态库  linking
 5.其他方面 clean等

四、示例

## 设置编译环境
CC:=gcc
CXX:=g++
BIN:= libdemo.so
FLAGS := -Wall -g -fPIC
CXX_FLAGS := -Wall -g -pipe -fPIC -shared -export-dynamic
LIB := -L../common/test/ -ltest
INCLUDE_PATH := -I/common/ -I../common/test/

## 获取要编译的源文件,以及把源文件转换为目标文件
SOURCES := $(wildcard *.c *.cpp)
OBJS := $(patsubst %.c, %.o, $(patsubst %.cpp,%.o,$(SOURCES)) )

## 将源文件编译为目标文件
%.o: %.c
$(CC) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH)

%.o:%.cpp
$(CXX) $(FLAGS) -c $< -o $@ $(INCLUDE_PATH)

## 将目标文件链接成可执行文件或动态库,或静态库
$(BIN) : $(OBJS)
$(CXX) $(CXX_FLAGS) $(OBJS) $(INCLUDE_PATH) $(LIB) -o $(BIN)
chmod a+x $(BIN)

## 其他
clean:
rm -rf *.o $(BIN)

install:
cp $(BIN) ../common/bin

Makfile文件编写的更多相关文章

  1. 网站 robots.txt 文件编写

    网站 robots.txt 文件编写 Intro robots.txt 是网站根目录下的一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的 ...

  2. 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤

    一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...

  3. linux库文件编写入门(笔记)

    linux库文件的编写 作者: laomai地址: http://blog.csdn.net/laomai 本文主要参考了如下资料⑴hcj写的"Linux静态/动态链接库的创建和使用&quo ...

  4. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  5. Pdf File Writer 中文应用(PDF文件编写器C#类库)

    该文由小居工作室(QQ:2482052910)    翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/ ...

  6. 一个简单的makefile文件编写

    下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...

  7. C++ Makefile文件编写

    对现有的一个C++动态库文件和调用程序,分别编写Makefile文件,从零开始,这里把自己弄明白的一些东西分享给大家. 1.必须明确Linux下,C++的编译器是g++,C语言的是gcc.网上大多数又 ...

  8. SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis

    一:DAO实体编码 1:首先,在src目录下,新建org.myseckill.entity包,用于存放实体类: 2:实体类设计 根据前面创建的数据库表以及映射关系,创建实体类. 表一:秒杀商品表 对应 ...

  9. 【Linux技术】linux库文件编写·入门

    一.为什么要使用库文件 我们在实际编程中肯定会遇到这种情况:有几个项目里有一些函数模块的功能相同,实现代码也相同,也是我们所说的重复代码.比如,很多项目里都有一个用户验证的功能. 代码段如下: //U ...

随机推荐

  1. MVC一些需要注意的问题

    不使用MVC,不知道MVC的好处,但是也会有一些坑,需要注意一下: 比如控件中添加HTML5自定义属性,以为是这样: @Html.TextBox("date",Model.Date ...

  2. [转]OPENSOLARIS 2009.06 REPOSITORY ISO IMAGES NOW AVAILABLE

    Source: http://hosam.wordpress.com/2009/07/25/opensolaris-2009-06-repository-iso-images-now-availabl ...

  3. PHP实现一个简单url路由功能

    如果一个页面的内容呈现,需要根据url上传递的参数来进行渲染.很多时候可能是这样子写:xxx.com/xx?c=x&m=x& t=..,而我们看到的url往往是这样子的(以新浪微游戏的 ...

  4. jQuery幻灯片插件Skippr

    Skippr是一款带左右箭头,索引按钮,滑动切换效果并且轻量.快速的幻灯片 设置 引入jquery.skippr.css.jquery.js.jquery.skippr.js 注意jQuery必须在j ...

  5. Ubuntu12.04安装配置Theano

    上次写了一个关于DL的开篇内容,本来说是要继续跟进的,后来教研室里面出了一些事情,加上写论文.和隔壁教研室做实验,就一直拖到现在.早就让小K配置环境研究研究Theano,这货和我一样也发拖延症了,理由 ...

  6. ARP 和 RARP

    ARP 和 RARP 1.ARP      地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确地址解析协议定其物理地址的一种协议.      在 ...

  7. Solr之NamedList 简单介绍与实例解析

    大家都知道,Solr是一个基于Lucene高可配置的搜索服务器,大部分参数值以及相关优化等等都可以在solrconfig.xml中配置,那么就需要一个能够很快的进行解析和读取配置文件内容的数据结构,为 ...

  8. STL---基本算法---<stl_algobase.h>概述

    通过一个实例来说明这些算法的接口使用: #include <iostream> #include <algorithm> #include <functional> ...

  9. autotools入门笔记(二)——创建和使用静态库、动态库

    带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...

  10. jvm回收对象

    jvm在判断对象死亡之前需要判断对象是否可到达,方法有引用计数算法和可达性分析算法,jvm采用的是后者.首先来了解一下这两种算法. 引用计数算法: 算法定义 为每个对象增加一个字段记录被引用的次数,并 ...