共用的几个源代码文件:

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. java web 工程找不到tomcat类 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    ava.lang.ClassNotFoundException: com.mysql.jdbc.Driverat org.apache.catalina.loader.WebappClassLoade ...

  2. Flutter实战视频-移动电商-64.会员中心_顶部头像UI布局

    64.会员中心_顶部头像UI布局 会员中心的样式 member.dart 清除原来的代码生成一个基本的结构 默认返回一个scaffold脚手架工具,body里面布局使用ListView,这样不会出现纵 ...

  3. 09.客户端集成IdentityServer

    09.客户端集成IdentityServer 新建API的项目 dotnet new webapi --name ClientCredentialApi 在我们上一节课的代码IdentityServe ...

  4. SQL Server服务器连接配置

    一.首先确保服务器能在本地打开数据库 如果碰到本地无法连接到数据库,首先要确认上图中两个服务是否开启 二.其次,要配置远端可连接的用户 如图,配置数据库[属性]中[安全性]为混合验证,勾中允许远程连接 ...

  5. JAVA基础--JAVA API集合框架(其他集合类,集合原理)15

    一.ArrayList介绍 1.ArrayList介绍 ArrayList它是List接口的真正的实现类.也是我们开发中真正需要使用集合容器对象. ArrayList类,它是List接口的实现.肯定拥 ...

  6. Angular6在自定义指令中使用@HostBingDing() 和@HostListener()

    emmm,,,最近在为项目的第二阶段铺路,偶然看到directive,想想看因为项目已经高度集成了第三方组件,所以对于自定义指令方面的经验自己实在知之甚少,后面经过阅读相关资料,总结一篇关于在自定义指 ...

  7. win10+PHP 安装redis

    1.给php环境安装redis扩展 2.给电脑安装redis环境 一.为php安装redis服务 使用 phpinfo() 函数查看php对应的版本 二.去下面的两个网站下载对应版本的压缩包并解压(注 ...

  8. hdoj5875【二分+RMQ】

    全部从我大哥那里学习得来.. 一开始硬着头皮就是根据思路上线段树,明知是T还要写(因为线段树还不是很熟,趁机练一发) 后来果然T了,然后就去学了一发RMQ的ST算法,查询是O(1). ST算法主要: ...

  9. IT兄弟连 JavaWeb教程 JavaBean组件定义

    JavaBean是一种可重复使用的且跨平台的软件组件.JavaBean可分为两种:一种是由用户界面的JavaBean,还有一种是没有用户界面(User Interface,UI),主要负责表示业务数据 ...

  10. 【书评】【不推荐】《TensorFlow:实战Google深度学习框架》(第2版)

    参考书 <TensorFlow:实战Google深度学习框架>(第2版) 这本书我老老实实从头到尾看了一遍(实际上是看到第9章,刚看完,后面的实在看不下去了,但还是会坚持看的),所有的代码 ...