SlideShare a Scribd company logo
1 of 29
GNU Make 简介 一个  GNU Make  快速导引 Mitch Davis [email_address] © CC-by-SA 3.0 for SZLUG, 14-Aug-2011
Make 是什么? Make 是一个构建软件的系统,它知道: ,[object Object]
如何构建(build) 简单规则+ 专家系统= 强大的功能
如何使用GNU make? ,[object Object]
只需执行  make  即可 Linux:  make 其它系统:  gmake  (可能需要自己编译安装)
为何学习/使用 make? ,[object Object]
并行编译 ⇒ 使用计算机所有的 CPU 内核
理解 / 维护其它的 makefile
哪个版本? ,[object Object]
cmake / scons 更新, 更好, 但还未被广泛应用
GNU make (gmake) 极好!
一个实际案例
基本的 makefile 组件 target: prerequisites commands target: prerequisites   为规则 commands   是动作 Target :目标 Prerequisites:  前件
Makefile 规则 ,[object Object]
如果必要前件变更,目标必须重构建
Make 使用时间戳
重构的条件: ,[object Object]
目标缺失
Makefile 动作 ,[object Object]
动作行必须以 Tab 字符开头
第一条规则是默认规则
通常要有一个叫  all  的默认规则
一个简单的 makefile edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h   cc -c utils.c 这是一个非常基本的 makefile,还可进一步改进!
变量 ,[object Object]
Recursively expanded variables:  VAR=   Evaluated when used CFLAGS=-O2 -g $(OTHER) OTHER += -fpic
附加:  VAR+=
引用变量:  $(VAR)
替换:  SRCS=foo.c bar.c; $(SRCS:.c=.o)
变量实例 比如说变量  OBJECTS  包含一个目标文件列表:  objects = program.o foo.o utils.o program: $(objects) cc -o program $(objects) $(objects): defs.h

More Related Content

What's hot

Jdbc中操作Blob、Clob等对象
Jdbc中操作Blob、Clob等对象Jdbc中操作Blob、Clob等对象
Jdbc中操作Blob、Clob等对象
yiditushe
 
Dbbuild2
Dbbuild2Dbbuild2
Dbbuild2
l l
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
OpenSourceCamp
 

What's hot (13)

加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
 
nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用nodejs在微博前端开发中的应用
nodejs在微博前端开发中的应用
 
Zsh
ZshZsh
Zsh
 
Jdbc中操作Blob、Clob等对象
Jdbc中操作Blob、Clob等对象Jdbc中操作Blob、Clob等对象
Jdbc中操作Blob、Clob等对象
 
Dbbuild2
Dbbuild2Dbbuild2
Dbbuild2
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
Effective linux.1.(commandline)
Effective linux.1.(commandline)Effective linux.1.(commandline)
Effective linux.1.(commandline)
 
MongoDB入门与实践
MongoDB入门与实践MongoDB入门与实践
MongoDB入门与实践
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)
 
Hadoop compress-stream
Hadoop compress-streamHadoop compress-stream
Hadoop compress-stream
 
前端各階段工作
前端各階段工作前端各階段工作
前端各階段工作
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
 

Viewers also liked

презентация лP № 2 091214 v2
презентация лP № 2 091214 v2презентация лP № 2 091214 v2
презентация лP № 2 091214 v2
Gulnaz Shakirova
 
лабораторная работа №3
лабораторная работа №3лабораторная работа №3
лабораторная работа №3
Gulnaz Shakirova
 
презентация лабораторная работа № 3
презентация лабораторная работа № 3презентация лабораторная работа № 3
презентация лабораторная работа № 3
Gulnaz Shakirova
 
расчетно графическая работа № 1
расчетно графическая работа № 1расчетно графическая работа № 1
расчетно графическая работа № 1
Gulnaz Shakirova
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
Gulnaz Shakirova
 
зис презентация метод реком по практике
зис презентация метод реком по практикезис презентация метод реком по практике
зис презентация метод реком по практике
Gulnaz Shakirova
 

Viewers also liked (19)

презентация лP № 2 091214 v2
презентация лP № 2 091214 v2презентация лP № 2 091214 v2
презентация лP № 2 091214 v2
 
лабораторная работа №3
лабораторная работа №3лабораторная работа №3
лабораторная работа №3
 
лекция 7
лекция 7лекция 7
лекция 7
 
презентация лабораторная работа № 3
презентация лабораторная работа № 3презентация лабораторная работа № 3
презентация лабораторная работа № 3
 
расчетно графическая работа № 1
расчетно графическая работа № 1расчетно графическая работа № 1
расчетно графическая работа № 1
 
лабораторная работа №2
лабораторная работа №2лабораторная работа №2
лабораторная работа №2
 
Items física resnick halliday – cap01 – [mediciones]
Items física resnick halliday – cap01 – [mediciones]Items física resnick halliday – cap01 – [mediciones]
Items física resnick halliday – cap01 – [mediciones]
 
слайды лаб 7 1
слайды лаб 7 1слайды лаб 7 1
слайды лаб 7 1
 
лабраб 5
лабраб 5лабраб 5
лабраб 5
 
Boosting based Transfer Learning
Boosting based Transfer LearningBoosting based Transfer Learning
Boosting based Transfer Learning
 
02 – vectores y cinemática en una dimensión
02 – vectores y cinemática en una dimensión02 – vectores y cinemática en una dimensión
02 – vectores y cinemática en una dimensión
 
Termodinámica
TermodinámicaTermodinámica
Termodinámica
 
лекция 11
лекция 11лекция 11
лекция 11
 
CNPM: Private NPM for Company / 企業級私有NPM
CNPM: Private NPM for Company / 企業級私有NPMCNPM: Private NPM for Company / 企業級私有NPM
CNPM: Private NPM for Company / 企業級私有NPM
 
02 – Vectores y Cinemática en una dimensión docentes (1)
02 – Vectores y Cinemática en una  dimensión docentes (1)02 – Vectores y Cinemática en una  dimensión docentes (1)
02 – Vectores y Cinemática en una dimensión docentes (1)
 
зис презентация метод реком по практике
зис презентация метод реком по практикезис презентация метод реком по практике
зис презентация метод реком по практике
 
10 domande sul cane
10 domande sul cane10 domande sul cane
10 domande sul cane
 
Mentoring per gli allievi Operatori
Mentoring per gli allievi OperatoriMentoring per gli allievi Operatori
Mentoring per gli allievi Operatori
 
лекция 8
лекция 8лекция 8
лекция 8
 

Similar to Make talk-cn

makefile20141121
makefile20141121makefile20141121
makefile20141121
Kevin Wu
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
Ching Yi Chan
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
維佋 唐
 
Subversion
SubversionSubversion
Subversion
i7Xh
 
使用Lua提高开发效率
使用Lua提高开发效率使用Lua提高开发效率
使用Lua提高开发效率
gowell
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
Shuo Chen
 

Similar to Make talk-cn (20)

gnutool
gnutoolgnutool
gnutool
 
Gnu
GnuGnu
Gnu
 
makefile20141121
makefile20141121makefile20141121
makefile20141121
 
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
 
Ch01
Ch01Ch01
Ch01
 
Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)Nae client(using Node.js to create shell cmd)
Nae client(using Node.js to create shell cmd)
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Subversion
SubversionSubversion
Subversion
 
使用Lua提高开发效率
使用Lua提高开发效率使用Lua提高开发效率
使用Lua提高开发效率
 
Docker Compose
Docker ComposeDocker Compose
Docker Compose
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
test
testtest
test
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 

Make talk-cn