Makefile学习心得17页PPT
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目标:依赖文件1,依赖文件2 命令 –依赖文件后缀 依赖文件1,依赖文件2, 目标 注意:命令行必须以单个的TAB字符进行缩进,不能是空格 当然也可以跟 目标和依赖文件在一行,不过要以;隔开
完整Makefile里包含什么
显式规则
由Makefile的书写者明显指出,要生成的文件,文件的依赖关系和生成的命令
要用以Tab开头) cn_work.o : cn_work.c gcc -c cn_work.c -o cn_work main.o : main.c cn_work.h gcc -c main.c -o main.o fun.o : fun.c fun.h gcc -c fun.c -o fun.o clean: rm -f cn_work *.o
如: foo.o : foo.c defs.h
依赖关系
gcc -o foo.o foo.c 生成目标的方法(方式)
隐晦规则
make有自动推导的功能,这样我们就可以简略地书写Makefile
如:
foo.o : foo.c (.o文件自己推导出同名的依赖文件.c.)
变量定义
这里面的变量一般都是字符串,他有点像c语言的宏
-c参数,只编译,不连接成为可执行文件,编译器只是由输 入的.c等源代码文件生成.o为后缀的目标文件
多目录下Makefile的写法(1)
目标:在工作目录下有4个文件夹 分别是 sources(源文件) obj (中 间文件)headers(头文件) bin(目标文件)
sources里面有 main.c cn_work.c fun.c obj 里面最初没有文件 headers 里面有 fun.h cn_work.h 最终目标取名为 cn_work 它应存放到bin里面 开始写Makefile的预备知识:
Makefile学习心得
21、没有人陪你走一辈子,所以你要 适应孤 独,没 有人会 帮你一 辈子, 所以你 要奋斗 一生。 22、当眼泪流尽的时候,留下的应该 是坚强 。 23、要改变命运,首先改变自己。
24、勇气很有理由被当作人类德性之 首,因 为这种 德性保 证了所 有其余 的德性 。--温 斯顿. 丘吉尔 。 25、梯子的梯阶从来不是用来搁脚的 ,它只 是让人 们的脚 放上一 段时间 ,以便 让别一 只脚能 够再往 上登。
多目录下Makefile的写法(2)
bin/cn_work : obj/main.o obj/cn_work.o obj/fun.o
gcc obj/main.o obj/cn_work.o obj/fun.o -o bin/cn_work (命令一
定要用以Tab开头)
obj/cn_work.o : sources/cn_work.c
gcc -I headers -c
sources/cn_work.c -o obj/cn_work.o
obj/main.o : sources/main.c
gcc -I headers -c
sources/main.c -o file_o/main.o
obj/fun.o : sources/fun.c
gcc 的3个参数: 1. -o 指定目标文件 gcc sources/main.c -o bin/main 2. -c 编译的时候只生产目标文件不链接 gcc -c sources/main.c -o obj/main.o 3. -I 主要指定头文件的搜索路径 gcc -I headers -c main.c -o main.o
如:H: =foo.c gcc -o foo.o $(H) (赋值可以用: =也可以直接用 =)
文件指示
包含3部分,一个是在一个Makefie中引用另一个Makefile,就像c语言的
include一样;另一个是根据某些情况指定Makefile中的有效部分,就像C语言
中的预编译#if一样;还有就是定义一个多行的命令。
1、需要由make工具创建的目标体(target),通常是目标文件或可执行文件。 2、要创建的目标体所依赖的文件(dependency_file)。 3、创建每个目标体时需要运行的命令(command)。 格式如下: target:dependency_files <TAB>command
MakeFile学习
陈龙
简单介绍Makefile
• 简化编译时所需要下达的指令; • 若在编译完成之后,修改了某个原始码档案,则 make 仅会针对被 修改了的档案进行编译,其它的 object file 不会被更动; • 最后可以依照相依性来更新( update )执行档。
编译和链接规则(输入make命令之后将按照以下规则工作)
gcc -I headers -c
file_c/fun.c
-o file_o/fun.o
clean:
rm -f bin/cn_work file_o/*.o
用隐式规则改进:
3个符号介绍:
1. $ 表示要生成的目标
2. $^ 表示全部的依赖文件 )
3. $< 表示第一个依赖文件
bin/cn_work : obj/main.o obj/cn_work.o obj/fun.o
注释
注释符用“#”如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,
如:“\#”。
书写一个简单的Makefile(适合所有文件在一个文件夹的情况)
cn_work : main.o cn_work.o fun.o gcc main.o cn_work.o fun.o -o cn_work main (命令一定
•如果这个工程没有编译过,那么我们的所有C文件都要编译并 被链接。
•如果这个工程的几个C文件被修改,那么我们只编译被修改 的C文件,并链接目标程序。
•如果这个工程的头文件被改变了,那么我们需要编译引用了这 几个头文件的C文件,并链接目标程序。
通用的Makefile里包含什么
在一个通用Makefile中通常包含下面内容:
gcc $^ -o $ (命令一定要用以Tab开头)
obj/cn_work.o : sources/cn_work.c
完整Makefile里包含什么
显式规则
由Makefile的书写者明显指出,要生成的文件,文件的依赖关系和生成的命令
要用以Tab开头) cn_work.o : cn_work.c gcc -c cn_work.c -o cn_work main.o : main.c cn_work.h gcc -c main.c -o main.o fun.o : fun.c fun.h gcc -c fun.c -o fun.o clean: rm -f cn_work *.o
如: foo.o : foo.c defs.h
依赖关系
gcc -o foo.o foo.c 生成目标的方法(方式)
隐晦规则
make有自动推导的功能,这样我们就可以简略地书写Makefile
如:
foo.o : foo.c (.o文件自己推导出同名的依赖文件.c.)
变量定义
这里面的变量一般都是字符串,他有点像c语言的宏
-c参数,只编译,不连接成为可执行文件,编译器只是由输 入的.c等源代码文件生成.o为后缀的目标文件
多目录下Makefile的写法(1)
目标:在工作目录下有4个文件夹 分别是 sources(源文件) obj (中 间文件)headers(头文件) bin(目标文件)
sources里面有 main.c cn_work.c fun.c obj 里面最初没有文件 headers 里面有 fun.h cn_work.h 最终目标取名为 cn_work 它应存放到bin里面 开始写Makefile的预备知识:
Makefile学习心得
21、没有人陪你走一辈子,所以你要 适应孤 独,没 有人会 帮你一 辈子, 所以你 要奋斗 一生。 22、当眼泪流尽的时候,留下的应该 是坚强 。 23、要改变命运,首先改变自己。
24、勇气很有理由被当作人类德性之 首,因 为这种 德性保 证了所 有其余 的德性 。--温 斯顿. 丘吉尔 。 25、梯子的梯阶从来不是用来搁脚的 ,它只 是让人 们的脚 放上一 段时间 ,以便 让别一 只脚能 够再往 上登。
多目录下Makefile的写法(2)
bin/cn_work : obj/main.o obj/cn_work.o obj/fun.o
gcc obj/main.o obj/cn_work.o obj/fun.o -o bin/cn_work (命令一
定要用以Tab开头)
obj/cn_work.o : sources/cn_work.c
gcc -I headers -c
sources/cn_work.c -o obj/cn_work.o
obj/main.o : sources/main.c
gcc -I headers -c
sources/main.c -o file_o/main.o
obj/fun.o : sources/fun.c
gcc 的3个参数: 1. -o 指定目标文件 gcc sources/main.c -o bin/main 2. -c 编译的时候只生产目标文件不链接 gcc -c sources/main.c -o obj/main.o 3. -I 主要指定头文件的搜索路径 gcc -I headers -c main.c -o main.o
如:H: =foo.c gcc -o foo.o $(H) (赋值可以用: =也可以直接用 =)
文件指示
包含3部分,一个是在一个Makefie中引用另一个Makefile,就像c语言的
include一样;另一个是根据某些情况指定Makefile中的有效部分,就像C语言
中的预编译#if一样;还有就是定义一个多行的命令。
1、需要由make工具创建的目标体(target),通常是目标文件或可执行文件。 2、要创建的目标体所依赖的文件(dependency_file)。 3、创建每个目标体时需要运行的命令(command)。 格式如下: target:dependency_files <TAB>command
MakeFile学习
陈龙
简单介绍Makefile
• 简化编译时所需要下达的指令; • 若在编译完成之后,修改了某个原始码档案,则 make 仅会针对被 修改了的档案进行编译,其它的 object file 不会被更动; • 最后可以依照相依性来更新( update )执行档。
编译和链接规则(输入make命令之后将按照以下规则工作)
gcc -I headers -c
file_c/fun.c
-o file_o/fun.o
clean:
rm -f bin/cn_work file_o/*.o
用隐式规则改进:
3个符号介绍:
1. $ 表示要生成的目标
2. $^ 表示全部的依赖文件 )
3. $< 表示第一个依赖文件
bin/cn_work : obj/main.o obj/cn_work.o obj/fun.o
注释
注释符用“#”如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,
如:“\#”。
书写一个简单的Makefile(适合所有文件在一个文件夹的情况)
cn_work : main.o cn_work.o fun.o gcc main.o cn_work.o fun.o -o cn_work main (命令一定
•如果这个工程没有编译过,那么我们的所有C文件都要编译并 被链接。
•如果这个工程的几个C文件被修改,那么我们只编译被修改 的C文件,并链接目标程序。
•如果这个工程的头文件被改变了,那么我们需要编译引用了这 几个头文件的C文件,并链接目标程序。
通用的Makefile里包含什么
在一个通用Makefile中通常包含下面内容:
gcc $^ -o $ (命令一定要用以Tab开头)
obj/cn_work.o : sources/cn_work.c