共用的几个源代码文件:

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. 生产环境下Flask项目目录构建

    接触Flask已经有大半年了,本篇博客主要来探讨如何规范化生产环境下Flask的项目目录结构.虽然目录结构见仁见智,个人有个人的看法和习惯,但总的来说,经过很多人的实践和总结,还是有很多共同的意见和想 ...

  2. 5 pyspark学习---Broadcast&Accumulator&sparkConf

    1 对于并行处理,Apache Spark使用共享变量.当驱动程序将任务发送给集群上的执行者时,集群中的每个节点上都有一个共享变量的副本,这样就可以用于执行任务了. 2 两种支持得类型 (1)Broa ...

  3. 1、webpack课程介绍

  4. PYTHON实现DFS算法

    class Vertice: def __init__(self,index): self.no = index self.color = 0 # 0:white 1 gray 2 black sel ...

  5. IOS Carthage安装、使用

    一.Carthage的安装和使用1.安装homebrew后输入如下命令 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercont ...

  6. 525. Contiguous Array

    Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. ...

  7. Linux系统查看网站访问日志

    日志地址 /www/wwwlogs/网站名称-access_log 下载到本地,改成txt文件 打开WPS,创建表格,导入数据,选择文件,然后点击下一步,直到选择文件类型时,选择分隔符号,下一步,把勾 ...

  8. GenericKeychain

    KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用操作的封装类,在官网上 下载了GenericKeychain项目后,只需要把“ ...

  9. extern用法详解(转)

    1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题:ext ...

  10. (转)linux du命令

    转自 http://www.cnblogs.com/peida/archive/2012/12/10/2810755.html Linux du命令也是查看使用空间的,但是与df命令不同的是Linux ...