makefile 学习(一)

1. 使用 makefile 的原因

假如每次都手动输入, 可能会写出这样的编译命令

?





1

2

3

4

5

6

7

gcc -c main.c

gcc -c mytool1.c

gcc -c mytool2.c

gcc -o main main.o mytool1.o mytool2.o

那么, 可不可以将这个命令写成 shell 脚本呢, 这样就不需要费事打命令了

但是, 使用脚本有一个弊端, 假设只有一个源文件被修改, 那么 shell 命令会把整个项目重新编译一遍

所以, 为了简化编译同时兼顾高效, make 命令应运而生, 但用 make 需要先编写 makefile 文件, makefile 告诉 make
编译规则

2. makefile 编写规则

makefile 注释以 # 开头

规则

target: componet // 第一行, 依赖关系

TAB rules // 第二行, 规则

一个 makefile 例子

?





1

2

3

4

5

6

7

8

9

#此行为注释

main: main.o mytool1.o mytool2.o

gcc -o main main.o mytool1.o mytool2.o

main.o: main.c mytool1.h mytool2.h

gcc -c main.c

mytool1.o: mytool1.c mytool1.h

gcc -c mytool1.c

mytool2.o: mytool2.c mytool2.h

gcc -c mytool2.c

3. makefile 文件的简化

三个常用变量

[email protected] 目标文件

$^ 所有依赖对象

$< 第一个依赖文件

有这三个变量, 上面的 makefile 可以简化为

?





1

2

3

4

5

6

7

8

9

#这是简化后的Makefile

main: main.o mytool1.o mytool2.o

gcc -o [email protected] $^

main.o: main.c mytool1.h mytool2.h

gcc -c $<

mytool1.o: mytool1.c mytool1.h

gcc -c $<

mytool2.o: mytool2.c mytool2.h

gcc -c $<

..c.o: makefile 的缺省规则, 这个规则表示所有的 .o 文件都依赖于响应的 .c 文件

这样, makefile 又可以简化为

?





1

2

3

4

5

#这是再一次简化后的Makefile

main: main.o mytool1.o mytool2.o

gcc -o [email protected] $^

..c.o:

gcc -c $<

4. linux 下, makefile 编写带 boost 程序

Reference

[1] http://blog.csdn.net/livelylittlefish/article/details/3854220

[2]

makefile 学习(一),码迷,mamicode.com

时间: 2024-10-28 13:50:15

makefile 学习(一)的相关文章

【Linux学习】Makefile学习(二)

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 40975    Accepted Submission(s): 13563 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats g

MakeFile 学习

MakeFile 学习 1.静态模式 objects = foo.o bar.o all: $(objects) $(CC) $(CFLAGS) -o -o [email protected] $^ $(objects): %.o: %.c $(CC) -c $(CFLAGS) $< -o [email protected] 上面的例子中,指明了我们的目标从$object中获取,"%.o"表明要所有以".o"结尾的目标,也就是"foo.o bar.o

[转]Windows平台下Makefile学习笔记

Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码):另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便. 本文主要分为三部分:第一部分讲述namke工具使用makefile的用法:第二部分讲述makefile的主要语法:

Makefile学习教程 跟我一起写 Makefile

https://github.com/zhangliyong/myknowledge/blob/master/Makefile%E5%AD%A6%E4%B9%A0%E6%95%99%E7%A8%8B%20%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99%20Makefile.wiki ++ Makefile学习教程 跟我一起写 Makefile 0 Makefile概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Wi

Makefile 学习&amp;binutils工具集,软件开发利器

gcc -E 能有效的帮助我们解决与宏有关的编译错误: gcc -S能获得一个C源程序文件的汇编程序: gcc -v能获得系统头文件的路径 生成依赖关系: gcc -M gcc -MM 生成不包含系统头文件的依赖关系 指定链接库: gcc -L:告诉gcc可以从哪个目录查找库文件: gcc -l :用于告诉gcc在生成可执行程序时需要链接的库名: 一.静态库生成步骤如下:步骤一:生成 str_out.o 目标文件gcc -c str_out.c注:不加 -o 则生成同名的 *.o 目标文件(st

gcc gdb makefile学习笔记

一.gcc (GNU C compiler )1.预处理  gcc -E aaa.c  -o aaa.i   →  .i(c代码)    ↓ 2. 编译   gcc -S aaa.i  -o aaa.s   →   .s(汇编代码)    ↓3. 汇编   gcc -c  aaa.s  -o aaa.o  →   .o(目标代码-二进制)    ↓4. 链接   gcc aaa.o    -o aaa    →   aaa(可执行文件) 优化编译链接   gcc -O(O2/O3) aaa.o

makefile 学习一

最近在学习nginx,由于实在linux下,一些代码需要用makefile文件来编译,比较节省时间.因为在nginx中添加一个新的模块如果用./configure方法来添加,特别是当你的代码有错时,修改以后又./configure,那么没编译一次都需要几分钟,实现在受不了了,就学习一下makefile,另一个原因是自己以前没有接触过linux,跟没有在linux下编写过代码,这次决定在学nginx的同时学习一个linux编程,当然就有必要学习一下makefile(按需求学习,重点放在学习ngin

【原创】MakeFile学习成果之模板

花了一个早上,看MakeFile的文档.参考例子,自己写了一个相对通用的MakeFile模板.特放上来,以防丢失.刚学习MakeFile的朋友可以参考看看,高手就当路过了!! 先看目录结构!! ls -R /************************************************.:cc.lst exe/  inc/  inc2/  Makefile  obj/  src/  src2/ ./exe:ftptest* ./inc:ftplib.h ./inc2:qftp.

Makefile学习总结

Makefile用法分析     在linux开发中,应用程序的编译基本都采用GNU的make工具,而make搭配Makefile来实现工程代码的编译,在越是大型复杂的项目中,make的强悍之处越是明显.在使用了一段时间make后,对其用法进行分析.本文是在学习了陈皓的"跟我一起学Makefile"文章后,对自己学习的小结. 一.简单的例子 现在,我们有一个C++的项目需要进行编译,项目包含3个头文件,3个.cpp文件,分别是main.cpp,main.h,read.cpp,read.