make与makefile的几个例子和(自己写一下,汗!忘记了!)总结
共用的几个源代码文件:
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的几个例子和(自己写一下,汗!忘记了!)总结的更多相关文章
- Flask---第一个例子--使用Flask写的【Hello World !】的web程序
from flask import Flask;------->引入Flask插件,pip install Flask; app=Flask(__name__) #变量app是Flask的一个实 ...
- 转+更新 Graphviz 教程,例子+ 高级应用 写代码,编程绘制架构图(分层拓扑图) 转自官网
1. Graphviz介绍 Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具. 它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”. Graphviz提供了dot语言来 ...
- 【Python】三个例子教你写代码
这篇文章包括用Python编写的斐波那契数列,三位数的水仙花数和百钱买百鸡的基础代码: (一)斐波那契数列: ''' def hanshu(n): n_1 = 1 n_2 = 1 m = n sumn ...
- 简单编写Makefile
相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- 如何自己编写Makefile
如何自己编写Makefile 相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用 ...
- Makefile学习笔记
ls -l 查看文件详细信息 1.gcc -E test.c -o test.i//预编译gedit test.i //查看:高级C 2.gcc -Wall -S test.i -o test.s// ...
- 使用AutoTools自动生成Makefile
前两天赶时间写了个简易的数据库系统,实现了简单的增删改查等功能.因为赶实验...无节操的我用shell实现的文件读写...咳咳...这都不是重点,重点是自己写Makefile感觉有点不伦不类...虽然 ...
- 自动生成 Makefile (automake/autoconf 入门)
作为Linux 下的程序开发人员,大家一定都遇到过Makefile ,用make 命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ,如果要想写出一个符合自由软件 ...
随机推荐
- Volley Cache机制分析
1.http缓存机制 要弄明白volley缓存机制,那么肯定是和浏览器的缓存机制有关了,简单来说volley整套框架要做的事都是模拟浏览器来进行一次次的http交互 1.1.概述 http缓存的是指当 ...
- 面试6-----11 const和静态变量那些事儿
6 看看const和指针的那些事儿 const在int*左边 const在int*右边 const在int*两边------>请看代码注释 (1)代码 #include <stdio.h& ...
- https协议(4)
架构层次 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTT ...
- PhpStorm之操作数据库
对数据库进行基本的操作 还不清楚如何使用PhpStorm连接本地数据库的朋友看一下我的上一篇博客配置数据库连接 点击已经连接好的数据库,找到下图中的 Consoles,然后点击 console(def ...
- 一款基于Bootstrap的js分页插件bootstrap-paginator使用实例
Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态的改变,以及事件来监听用户的动作 ...
- TRANSFORM_TEX
Shader "Custom/Exam1" { Properties { _MainTex ("Texture", 2D) = "white" ...
- 微信小程序云开发之云函数的创建与环境配置
云函数的使用与环境配置: 1.创建云函数 右键cloudfunctions文件选择新建Node.js云函数,云函数命名为updateVoice用于修改用户语音数量. 2.安装node.js及npm: ...
- QuantLib 金融计算——基本组件之 ExchangeRateManager 类
目录 QuantLib 金融计算--基本组件之 ExchangeRateManager 类 概述 Money 类中的汇率转换配置 ExchangeRateManager 函数 如果未做特别说明,文中的 ...
- JAVA实训总结 :String
String是特殊的类,与其他基本类型并不相同,是被java封装的类型 String底层组成对象为数组与字典(字符集编码表) String 类型的字符串是存储在JVM特别开辟的字符串常量池中 创建 ...
- CSS 两边是线 中间是文字的效果
刚开始做的时候 想了一下 这个是怎么做出来的,后来在网上看到有个类似的效果,研究一下 <!DOCTYPE html> <html lang="en"> &l ...