共用的几个源代码文件:

main.c 2.c 3.c

代码依次为:

 #include<stdlib.h>
#include "a.h"
extern void function_two();
extern void function_three(); int main()
{
function_two();
function_three();
exit (EXIT_SUCCESS);
}
#include "a.h"
#include "b.h" void function_two(){}
#include "b.h"
#include "c.h" void function_three(){}

还有三个文件:a.h b.h c.hz使用shell命令创建它们。

touch a.h b.h c.h

第一个版本的makefile

 all:myapp

 # Which compiler
cc = gcc # Where are include files kept
INCLUDE = . # Options for development
CFLAGS = -g -Wall -ansi myapp: main.o .o .o
$(cc) -o myapp main.o .o .o main.o: main.o a.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c main.c .o:.c a.h b.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c .c .o:.c b.h c.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c .c

第二个版本的makefile

 all:myapp

 # Which compiler
cc = gcc # Where to install
INSTDIR = /usr/local/bin # Where are include files kept
INCLUDE = . # Options for development
CFLAGS = -g -Wall -ansi myapp: main.o .o .o
$(cc) -o myapp main.o .o .o main.o: main.o a.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c main.c .o:.c a.h b.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c .c .o:.c b.h c.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c .c clean:
-rm main.o .o .o install: myapp
@if [-d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR); && \
chmod a+x $(INSTDIR)/myapp; && \
chmod og-w $(INSTDIR) /myapp; && \
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi

第三个版本的makefile

all:myapp

# Which compiler
cc = gcc # Where to install
INSTDIR = /usr/local/bin # Where are include files kept
INCLUDE = . # Options for development
CFLAGS = -g -Wall -ansi myapp: main.o .o .o
$(cc) -o myapp main.o .o .o main.o: main.o a.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c main.c .o:.c a.h b.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c .c .o:.c b.h c.h
$(cc) -I$(INCLUDE) $(CFLAGS) -c .c clean:
-rm main.o .o .o install: myapp
@if [-d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR); && \
chmod a+x $(INSTDIR)/myapp; && \
chmod og-w $(INSTDIR) /myapp; && \
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi

第四个版本的makefile

all: myapp

# Which compiler
CC = gcc # Where to install
INSTDIR = /usr/local/bin # Where are include files kept
INCLUDE = . # Options for development
CFLAGS = -g -Wall -ansi # Options for release
# CFLAGS = -O -Wall -ansi # Local Libraries
MYLIB = mylib.a myapp: main.o $(MYLIB)
$(CC) -o myapp main.o $(MYLIB) $(MYLIB): $(MYLIB)(.o) $(MYLIB)(.o)
main.o: main.c a.h
.o: .c a.h b.h
.o: .c b.h c.h clean:
-rm main.o .o .o $(MYLIB) install: myapp
@if [ -d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR);\
chmod a+x $(INSTDIR)/myapp;\
chmod og-w $(INSTDIR)/myapp;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi

就上述例子做个总结:

  1.第一行要指定:all的对象

  2.table所在,命令所在。即所有命令均以table键开头。

  3.#键所在,注释所在。

  4.$( )所在,宏定义所在。

  5.  .  点所在,即为当前目录。

  6. -I 表示指定目录。

  7. 内置宏定义:

    $d:表示目录

makefile文件结构:

  第一点:设定all:可执行文件名

  第二点:gcc -MM 主文件名

        输出依赖关系

  第三点:然后根据依赖关系写命令

      第一.写生成可执行文件的命令,且后面根着的是目标文件。

      第二.写生成目标文件的命令即编译函数(包括主函数)文件什么,且后面根着的是源文件

make与makefile的几个例子和(自己写一下,汗!忘记了!)总结的更多相关文章

  1. Flask---第一个例子--使用Flask写的【Hello World !】的web程序

    from flask import Flask;------->引入Flask插件,pip install Flask; app=Flask(__name__) #变量app是Flask的一个实 ...

  2. 转+更新 Graphviz 教程,例子+ 高级应用 写代码,编程绘制架构图(分层拓扑图) 转自官网

    1. Graphviz介绍 Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具. 它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”. Graphviz提供了dot语言来 ...

  3. 【Python】三个例子教你写代码

    这篇文章包括用Python编写的斐波那契数列,三位数的水仙花数和百钱买百鸡的基础代码: (一)斐波那契数列: ''' def hanshu(n): n_1 = 1 n_2 = 1 m = n sumn ...

  4. 简单编写Makefile

    相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...

  5. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  6. 如何自己编写Makefile

    如何自己编写Makefile   相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用 ...

  7. Makefile学习笔记

    ls -l 查看文件详细信息 1.gcc -E test.c -o test.i//预编译gedit test.i //查看:高级C 2.gcc -Wall -S test.i -o test.s// ...

  8. 使用AutoTools自动生成Makefile

    前两天赶时间写了个简易的数据库系统,实现了简单的增删改查等功能.因为赶实验...无节操的我用shell实现的文件读写...咳咳...这都不是重点,重点是自己写Makefile感觉有点不伦不类...虽然 ...

  9. 自动生成 Makefile (automake/autoconf 入门)

    作为Linux 下的程序开发人员,大家一定都遇到过Makefile ,用make 命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ,如果要想写出一个符合自由软件 ...

随机推荐

  1. 2.3-2.6 HBase java API

    一.get .put.delete.scan 1.代码 package com.beifeng.senior.hadoop.hbase; import org.apache.hadoop.conf.C ...

  2. sql之外键变种

    多对一 : 只需设个外键 外键变种之一对一:普通外键关联的表是一对多关系,如果外键上再加上唯一索引,表就会变成一对一关系. 外键变种之多对多:

  3. Linux下共享库嵌套依赖问题 (转载)

    转自:http://my.oschina.net/moooofly/blog/506466 问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 ...

  4. JQuery学习笔记(二)JQuery方法

    jQuery 提供一系列与 DOM 相关的方法,便于访问和操作元素和属性 Query 文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addCl ...

  5. E20180511-hm

    thread  n. 螺纹; 线; 线索; 线状物;      vt. 穿成串; 将(针.线等)穿过…; 用…线缝; 给…装入(胶片.狭带.绳子); needle n. 针; 针状物; <口&g ...

  6. vue-cli目录结构介绍002

    总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] bui ...

  7. OpenGL Geometry Shader

    http://blog.csdn.net/bugrunner/article/details/5455324 Geometry Shader可以处理Vertex Shader和Fragment Sha ...

  8. Matplotlib 在绘画bar时, 鼠标响应点击 bar 的消息

    官方教程: http://urania.udea.edu.co/sitios/astronomia-2.0/pages/descargas.rs/files/descargasdt5vi/Cursos ...

  9. 洛谷P3265 [JLOI2015]装备购买(线性基+高斯消元)

    传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 不难看出题目讲的就是线性基 这种最小化权值的问题一般都是贪心的,就是按价值从低到高考虑每一个是否能选 据说贪心的证明得用拟阵我不会 据说这题是实数意 ...

  10. [Xcode 实际操作]八、网络与多线程-(24)社会化分享功能开发包的安装和配置:微信、QQ、微博

    目录:[Swift]Xcode实际操作 本文将演示如何在开放平台注册应用,并获得相关的密钥信息,用于实现后面文章的微博分享功能. 一.新浪微博开放平台 [登录]->[微服务]->[粉丝服务 ...