C_C++编译调试---Makefile 基础

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量 六.Makefile特有功能:make自动推导功能 七.Makefile高级功能:makefile函数 八.Makefile修养:清空目标文件的规则
变量中的变量 在定义变量的值时,我们可以使用其它变量来构造变量的值,在 Makefile中有两种方式来用变量定义变量的值 第一种方式,也就是简单的使用“=”号 foo = $(bar) bar = $(ugh) x = foo 其等价于: ugh = Huh y = $(x) bar y = later bar all: x = later x = later echo $(foo) Foo等价于“Huh” 第二种方式,是“:=”操作符。“:=”是即时展开
一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量
六.Makefile特有功能:make自动推导功能
什么是makefile、Makefile 介绍
Makefile ----整个工程的编译规则 make 命令----根据整个工程的编译规则 来调用相关程序(gcc/g++) 进行编译链接的工具 make是一个命令工具,是一个解释makefile中指令的命令工具
make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎 么样的去编译和链接程序
一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量 六.Makefile特有功能:make自动推导功能 七.Makefile高级功能:makefile函数 八.Makefile修养:清空目标文件的规则
Makefile高级功能:makefile函数
示例: comma:= , empty:= space:= $(empty) $(empty) foo:= a b c bar:= $(subst $(space),$(comma),$(foo))
Makefile高级功能:makefile函数
常用函数 1 字符串处理函数 $(subst <from>;,<to>;,<text>;) 名称:字符串替换函数——subst。 功能:把字串<text>;中的<from>;字符串替换成<to>;。 返回:函数返回被替换过后的字符串。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个 make命令,整个工程完全自动编译,极大的提高了软件开发的效率
流行的IDE工具都是用make 来管理工程的编译与链接,如vs 6.0 vs2003 ,vs2005 ,eclipse etc.
一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
例子: objects := program.o foo.o utils.o program : $(objects) cc -o program ${objects} objects := bar.o program2 : $(objects) cc -o program2 ${objects}
Makefile基础:Biblioteka Baiduakefile中的变量
概述 从程序的编译和链接说起
Makefile 是什么? Makefile 让我们得到了什么?
概述 从程序的编译和链接说起
xxx.a ar .C .c .cc .cp .cpp .obj .o ld Execute program xxx.so
compile
.obj .o
.obj .o
link
g++ foo.cpp –c foo.o
一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量 六.Makefile特有功能:make自动推导功能 七.Makefile高级功能:makefile函数 八.Makefile修养:清空目标文件的规则
C/C++编译调试---Makefile 基础
目录 一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量 六.Makefile特有功能:make自动推导功能 七.Makefile高级功能:makefile函数 八.Makefile修养:清空目标文件的规则
一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量 六.Makefile特有功能:make自动推导功能
Makefile基础:makefile中的变量
思考: nullstring := space := $(nullstring) # end of the line space 的值是什么? dir := /foo/bar # directory to put the frobs in $(dir)/file 的值是什么? 会引起什么错误?
七.Makefile高级功能:makefile函数
八.Makefile修养:清空目标文件的规则
Makefile高级功能:makefile函数
在Makefile中可以使用函数来处理变量。 函数调用后,函数的返回值可以当做变量来使用 函数的调用语法: $(<function>; <arguments>;) 或是 ${<function>; <arguments>;} <function>;就是函数名 <arguments>;是函数的参数,参数间以逗号“,”分隔
2 Makefile基础:Makefile的规则
Makefile最根本的规则: 也就是Makefile中最核心的内容 target ... : prerequisites ... command 1 command 2 ... Target:也就是目标文件(可以是Object File、执行文件、一个标签) Prerequisites:就是要生成那个target所需要(依赖)的文件或是目标 command也就是make需要执行的命令。(任意的Shell命令)
ar –rvl mylib.a foo.o bar.o ld –shared –o mylib.so foo.o bar.o
g++ foo.o –o foo
概述 从程序的编译和链接说起
问题:
当一个工程存在多个目录,多个源程序文件时,我们该怎么办?
最笨的解决方法:用gcc/g++手工地一个一个文件地编译生成object 文 件,然后再用gcc/g++ 链接文件。 改进方法: 编写出整个工程的编译规则,用一工具根据 整个工程的 编译规则 来来调用相关程序(gcc/g++)进行编译链接 更先进的: 自动生成 整个工程的编译规则 ,然后用工具根据规则编 译链接
Makefile基础:make程序的工作原理
查找当前目录下 是否存在makefile
Make 命令
GNUmakefile makefile Makefile -f /path/to/file
#makefile , edit by anselyang # helloworld.exe : main.o kbd.o cc -o helloworld.exe main.o kbd.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c clean : rm helloworld.exe main.o kbd.o
七.Makefile高级功能:makefile函数 八.Makefile修养:清空目标文件的规则
Makefile特有功能:make自动推导功能
本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不 需要我们再写出来的规则
make可以自动推导生成这个目标的规则和命令,那么这个行为就是 隐含规则的自动推导 foo : foo.o bar.o cc –o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
x := foo y := $(x) bar x := later 其等价于: y := foo bar x := later
Makefile基础:makefile中的变量 条件操作符是 “?=”
例: FOO ?= bar 其含义是,如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前 被定义过,那么这条语将什么也不做
2 Makefile基础:Makefile的规则
helloworld.exe : main.o kbd.o ( Tab键)cc -o helloworld.exe main.o kbd.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c clean : rm helloworld.exe main.o kbd.o 要执行的命令行一定要以一个Tab键作为开头 。
一.概述 从程序的编译和链接说起
二. 什么是makefile、Makefile 介绍 (what to do)
三.Makefile基础:Makefile的规则
四.Makefile基础:make程序的工作原理(how to do)
五.Makefile基础:makefile中的变量
六.Makefile特有功能:make自动推导功能 七.Makefile高级功能:makefile函数 八.Makefile修养:清空目标文件的规则
Makefile基础:makefile中的变量
在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表 了一个文本字串,Makefile中执行的时候其会自动原模原样地展开 其与C/C++所不同的是,你可以在Makefile中改变其值 变量在声明时需要给予初值,而在使用时,需要给在变量名前加上 “$”符号,但最好用小括号“()”或是大括号“{}”
因为有自动推导规则,我们完全没有必要写下下面的两条规则: foo.o : foo.c cc –c foo.c $(CFLAGS) bar.o : bar.c cc –c bar.c $(CFLAGS)
Makefile特有功能:make自动推导功能
模式规则示例 下面这个例子表示了,把所有的[.c]文件都编译成[.o]文件. %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
追加变量值操作符 “+=”
objects = main.o foo.o bar.o utils.o objects += another.o $(objects)值变成:“main.o foo.o bar.o utils.o another.o”
自动化变量
$@ 表示规则中的目标文件(挨个值) $< 依赖目标中的第一个目标名字 (挨个值) $^ 所有的依赖目标的集合 $+ 同S^ 不去重复 $? 所有比目标新的依赖目标的集合。以空格分隔。
相关文档
最新文档