共用的几个源代码文件:

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. Game of Peace

    Time Limit: 4000ms, Special Time Limit:10000ms, Memory Limit:65536KB Total submit users: 20, Accepte ...

  2. PHP实用小程序(六)

    <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio ...

  3. 服务迁移之路 | Spring Cloud向Service Mesh转变

    一.导读 Spring Cloud基于Spring Boot开发,提供一套完整的微服务解决方案,具体包括服务注册与发现,配置中心,全链路监控,API网关,熔断器,远程调用框架,工具客户端等选项中立的开 ...

  4. iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架

    cocoapods使用 ReactiveObjC -- 对应的是RAC的OC版本,最新3.1.0版本. ReactiveCocoa--对应的是RAC的swift版本,最新7.1.0版本. 1.纯OC项 ...

  5. Shader第十三讲 Alpha混合

    http://blog.sina.com.cn/s/blog_471132920101d8z5.html Alpha Blending,中文译作Alpha混合Blending就是控制透明的.处于光栅化 ...

  6. 远程kafka通信实例,各种bug解决----虚拟机+本地电脑

    为了实现远程kafka通信,我可谓是呕心沥血.期间各种bug各种调,太煎熬了 (T.T) 介绍: 我用一台虚拟机作为远程消息的发送方,用本地电脑主机作为消息的接收方 虚拟机:安装java,kafka, ...

  7. 掌握MySQL数据库这些优化技巧,事半功倍!

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大 ...

  8. Requests 入门

    首先直接通过管理员运行cmd,然后执行 pip install requests  就可以直接安装Requests库了 有个最基本的语句 r = requests.get(url) 通过request ...

  9. 2017浙江工业大学-校赛决赛 小M和天平

    Description 小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边.他现在知道每个石子的重量.问能不能根据上述条件,能不能测出所问的重量. ...

  10. python之生成器(~函数,列表推导式,生成器表达式)

    一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...