2Makefile



1关于Makefile,在编写Makefile的时候,Makefile这个名称第一个字母要大写。并且必须是Makefile.一个Makefile就相当于:

#目标:依赖(条件)

#      
命令    
à注意这里前面是一个tab

2案例:

A:创建一个项目calc,案例项目结构如下:

B编写mul.c

C编写sub.c

D编写add.c

E编写dive.c

F编写main.c

G编写common.h

3.编写Makefile

阶段1

阶段2

阶段3:

运行结果:

#阶段4

#定义变量,下面一句表示指定头文件所在的位置加载头文件,-l头文件包名

CPPFLAGS = -Iinclude

#加上-g表示调试模式,通过它可以看到源代码,在项目发布的时候去掉-g,-Wall严格编译

CFLAGS = -g -Wall

LDFLAGS=

#表示使用

CC=gcc

#表示如果是arm下,gcc可能是下面这个编译器

#CC=arm-linux-gcc

#$(wildcard *.c)表示当前目录下的所有.c文件

src = $(wildcard *.c)

#下面的意思是将所有的.c文件替换成为.o文件

obj = $(patsubst %.c,%.o,$(src))

target = app

#程序最终编译成app,依赖$(obj),而需要执行的命令是紧接着的下面一句,$^表示所有的依赖,[email protected]表示要生成的目标,这句的目标是$(target),也就是app文件

$(target):$(obj)

$(CC)S^ $(LDFLAGS) -o [email protected]

#$<表示一个的编译成目标文件[email protected]

%.o:%.c

$(CC)-c $< $(CFLAGS) $(CPPFLAGS) -o [email protected]

#通过这种方式避免和当前已存在的clean文件冲突,下面声明的是一个伪目标

.PHONY:clean

#彻底清除生成过程文件

clean:

-rm-f *.o

-rm-f app

#彻底清除过程文件和生成配置文件

distclean:

rm/usr/bin/app

install:

cpapp /usr/bin

时间: 2024-09-29 15:30:38

2Makefile的相关文章

linux笔记之2--makefile

1.概述 此系列是为自己做的一个总结,不是很系统,主要目的是记录linux下我认为经常忘的方方面面. 2.makefile的规则 target: prerequisites command ... ... target也就是一个目标文件,可以是Object File,也可以是执行文件. prerequisites就是,要生成那个target所需要的文件或是目标,也就是依赖项. command也就是make需要执行的命令.(任意的Shell命令) 在Makefile中的命令,必须要以[Tab]键开

一篇文章教你读懂Makefile

makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefil

Socket编程实践(3)

Socket 基础API实践(2)--实现回射服务器 accept函数 功能:从已完成连接队列返回第一个连接,如果已完成连接队列为空,则阻塞. 原型 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 参数 sockfd:服务器套接字 addr:将返回对等方的套接字地址 addrlen:返回对等方的套接字地址长度 返回值 On  success, these system calls return a nonneg

[原创]Nexus5 内核编译烧录过程记录

参考Android系统源代码情况分析第二章进行实践,为了提高效率,也为了增加实践机会,使用Nexus5进行内核编译.需要说明的是,Android源代码工程默认是不包含它所使用的Linux内核源码,如果需要运行定制的Linux内核,就要单独下载内核源码,并且对它进行编译.Nexus Android源码的编译参考 1.下载nexus5 对应的内核源码 Android系统使用的是Linux内核,但与主线分枝的Linux内核又有一些差异,各个不同的厂商又有自己的修改.内核源码位于谷歌境外服务器,不FQ无

Makefile经典教程

 makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力.因为,makefile关系到

Makefile 书写规则

1.1 Makefile的规则 在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则. target ... : prerequisites ...   command   ...   ... target也就是一个目标文件,可以是Object File,也可以是执行文件.还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述. prerequisites就是,要生成那个target所需要的文件或是目标. command也就是make需要执

Makefile经典教程(掌握这些足够)

makefile很重要http://blog.csdn.NET/ruglcc/article/details/7814546      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefil

(转)Makefile经典教程(掌握这些足够)

转自:  http://blog.csdn.net/ruglcc/article/details/7814546/ makefile很重要      什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写

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