makefile文件怎么写

1. 如何自己编写Makefile

如何自己编写Makefile 相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云。

在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide。其实makefile并没有想象的那么难写,只要你明白了其中的原理,自己实践几次。

你也可以自己写makefile,让别人对你头来羡慕的目光。 下面本人介绍一下自己的学习成果,初学阶段,欢迎大家多多指正。

简单的说,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至可以在makefile中执行shell脚本。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

关于程序的编译和链接 一般来说,无论是C还是C++,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile),一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。

链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来 链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给 中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

下面我们开始看看如何自己写出makefile。 Makefile的规则 目标 : 需要的条件 (注意冒号两边有空格) 命令 (注意前面用tab键开头) 解释一下: 1 目标可以是一个或多个,可以是Object File,也可以是执行文件,甚至可以是一个标签。

2 需要的条件就是生成目标所需要的文件或目标 3 命令就是生成目标所需要执行的脚本 总结一下,就是说一条makefile规则规定了编译的依赖关系,也就是目标文件依赖于条件,生成规则用命令来描述。在编译时,如果需要的条件的文件比目标更新的话,就会执行生成命令来更新目标。

下面举个简单的例子说明。如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的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 clean : rm edit main.o kbd.o command.o display.o / insert.o search.o files.o utils.o 将上面的内容写入到Makefile文件中,然后执行make就可以进行编译,执行make clean就可以删除所有目标文件。解释一下,也就是说生成最终的目标文件edit,依赖于一系列的.o目标文件,而这些.o文件又是需要用源文件来编译生成的。

需要注意的是,clean后面没有条件,而clean本身也不是文件,它只不过是一个动作名字,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。 make是如何工作的 在默认的方式下,也就是我们只输入make命令。

那么, 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。

3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。 4、如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。

(这有点像一个堆栈的过程) 5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。 makefile中使用变量 前面的知识已经足以让你自己完成一个简单的makefile了,不过makefile的精妙之处远不止如此,下面来看看如何在makefile中使用变量吧。

在上面的例子中,先让我们看看edit的规则: 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。.。

2. 如何写Makefile文件

如果你想写 Makefile 的话,那么你只要用一个不将制表符过滤掉的文本编辑器就可以了,用 vi/vim 可以,用 emacs 可以,用其它的 geditor 也是可以的,只要是文本编辑器就可以了。你在 win 下也可以用记事本写 Makefile ,当然要确保你的系统已经安装了 make 了(最好了 GNU make)。Makefile 是不需要后缀的,也就是说 Makefile 的文件名就是 Makefile。

下面我给出一个我写的一个简单的 Makefile 给你参考一下吧:

# Makefile for 'kmp'

CC=gcc

CFLAGS=-g

kmp: kmpindex.o getnext.o main.o

$(CC) -o kmp kmpindex.o getnext.o main.o

kmpindex.o: kmpindex.c kmp.h

$(CC) -c kmpindex.c

getnext.o: getnext.c kmp.h

$(CC) -c getnext.c

main.o: main.c kmp.h

$(CC) -c main.c

clean:

rm -f *.o

# END

没有太多的注释,因为是用于小测试的。希望对你有所帮助

3. 怎么写这个程序的Makefile文件

Makefile文件名字,放在这个你这个程序的目录中:

prog=app

OBJS=sin_value.o cos_value.o haha.o main.c

LDFLAGS:= #这个是编译参数例:-lpthread 线程库

CFLAGS:= -g -Wall #可调式,以及编译警告通知

all:$(prog)

sin_value.o:sin_value.c

$(CXX) $(CFLAGS) -c -o $@ $^

cos_value.o:cos_value.c

$(CXX) $(CFLAGS) -c -o $@ $^

haha.o: haha.c

$(CXX) $(CFLAGS) -c -o $@ $^

main.o:main.c

$(CXX) $(CFLAGS) -c -o $@ $^

install:

cp $(prog) /bin

clean:

rm -rf *.o *~

rm -rf $(prog)

rm -rf /bin/$(prog)

$(prog):$(OBJS)

$(CXX) $(LDFLAGS) -o $@ $^

4. 这个makefile文件怎么写

obj-m =xxx.o

KDIR=xxx

PWD =$(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

@rm -vf *.o *.ko *. *.mod.c *.order *.mod.o *.symvers *~

其中的xxx.o需要你自己填写,比如你这个文件是hello.c,那就写成hello.o,然后KDIR=xxx,这个xxx是linux源码目录,比如/home/xxx/kernel,那就写成KDIR = /home/xxx/kernel,然后在Makefile的目录下执行make就行了

5. 怎么写这个程序的Makefile文件

Makefile文件名字,放在这个你这个程序的目录中:prog=appOBJS=sin_value.o cos_value.o haha.o main.cLDFLAGS:= #这个是编译参数例:-lpthread 线程e5a48de588b63231313335323631343130323136353331333262373935库CFLAGS:= -g -Wall #可调式,以及编译警告通知all:$(prog)sin_value.o:sin_value.c $(CXX) $(CFLAGS) -c -o $@ $^ cos_value.o:cos_value.c $(CXX) $(CFLAGS) -c -o $@ $^ haha.o: haha.c $(CXX) $(CFLAGS) -c -o $@ $^ main.o:main.c $(CXX) $(CFLAGS) -c -o $@ $^ install: cp $(prog) /binclean: rm -rf *.o *~ rm -rf $(prog) rm -rf /bin/$(prog)$(prog):$(OBJS) $(CXX) $(LDFLAGS) -o $@ $^。

6. 编写一个简单的 makefile 文件

makefile文件里面主要有三种内容: 1.变量声明: 变量声明就是一种基本的严格字符替换的操作。

比如在前面声明了:objects=program.o foo.o utils.o 那么在后面出现的所有$(objects)或者${objects}都会被自动替换成上面的那个字符序列,而且是严格替换,即不带空格的。 2.映射法则 3.命令: 映射法则和命令通常都是联合起来组成这样的结构形式: target。

: prerequisites.. command 可以简单地理解为通过prerequisites,也就是先决的依赖文件,采取后面描述的相应的命令(这里的命令都是linux里的shell命令)command之后(一般是)生成了文件target。命令的前面都要按以下tab建留一段空白来表示它是命令。

有的target后面并没有先决条件,也就是后面的命令是无条件执行的。makefile 文件c语言程序:#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){printk(KERN_ALERT "Hello, world\n");return 0;}static void hello_exit(void){printk(KERN_ALERT "Goodbye, cruel world\n");}module_init(hello_init);module_exit(hello_exit);makefile:# If KERNELRELEASE is defined, we've been invoked from the# kernel build system and can use its language.ifneq ($(KERNELRELEASE),)obj-m := hello.o # Otherwise we were called directly from the command# line; invoke the kernel build system.elseKERNELDIR ?= /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd) default:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesendif。

7. 如何写一个简单的makefile

一:makefile 雏形:#makefile的撰写是基于规则的,当然这个规则也是很简单的,就是:#target : prerequisitescommand //任意的shell 命令实例如下:makefile:helloworld : main.o print.o #helloword 就是我们要生成的目标# main.o print.o是生成此目标的先决条件gcc -o helloworld main.o print.o#shell命令,最前面的一定是一个tab键mian.o : mian.c print.hgcc -c main.cprint.o : print.c print.hgcc -c print.cclean :rm helloworld main.o print.oOK,一个简单的makefile制作完毕,现成我们输入 make,自动调用Gcc编译了,输入 make clean就会删除 hellowworld mian.o print.o二:小步改进:在上面的例子中我们可以发现 main.o print.o 被定义了多处,我们是不是可以向C语言中定义一个宏一样定义它呢?当然可以:makefile:objects = main.o print.o #应该叫变量的声明更合适helloworld : $(objects) //声明了变量以后使用就要$()了gcc -o helloworld$(objects)mian.o : mian.c print.hgcc -c main.cprint.o : print.c print.hgcc -c print.cclean :rm helloworld $(objects)修改完毕,这样使用了变量的话在很多文件的工程中就能体现出方便性了。

三:再进一步:再看一下,为没一个*.o文件都写一句gcc -c main.c是不是显得多余了,能不能把它干掉?而且 main.c 和print.c都需要print.h,为每一个都写上是不是多余了,能不能再改进?能,当然能了:makefile:objects = main.o print.ohelloworld : $(objects)gcc -o helloworld$(objects)$(objects) : print.h # 都依赖print.hmian.o : mian.c #干掉了gcc -c main.c 让Gun make自动推导了。print.o : print.cclean :rm helloworld $(objects)。

转载请注明出处育才学习网 » makefile文件怎么写

知识

六年级数学小论文怎么写

阅读(202)

本文主要为您介绍六年级数学小论文怎么写,内容包括六年级数学小论文怎么写,六年级上数学小论文,小学六年级数学小论文怎样写啊急用。感悟数学 曾听一位奥数老师说过这么一句话:学数学,就犹如鱼与网;会解一道题,就犹如捕捉到了一条鱼,掌握了一种

知识

打的繁体字怎么写

阅读(185)

本文主要为您介绍打的繁体字怎么写,内容包括打的繁体字怎么写,繁体字怎么打的,打繁体字怎么打的。方法1:清华紫光输入法 就能转换繁体字 http://nc.onlinedown.net/down/unispim30.exe 点右键选

知识

恋爱日记怎么写

阅读(402)

本文主要为您介绍恋爱日记怎么写,内容包括恋爱日记怎么写啊还有,要写多久,恋爱日记怎么写,我该怎么写我的恋爱日记。你好,这位朋友,非常开心为你解答问题,能看出你们现在应该相处的不错哦,所以想到些恋爱日记吧。其实很简单的,不用那么复杂。你

知识

明亮的拼音怎么写

阅读(283)

本文主要为您介绍明亮的拼音怎么写,内容包括明亮的拼音是什么,明亮是谁演的用拼音写出来,明的拼音怎么写。叶 (叶) yè 植物的营养器官之一:树叶。菜叶。叶子。叶落归根。一叶知秋。一叶蔽目(喻目光短浅,常被眼前细小事物所遮蔽,看不到远处、大

知识

俭的繁体字怎么写

阅读(164)

本文主要为您介绍俭的繁体字怎么写,内容包括俭字繁体怎么写,有多少画,勤的繁体字怎么写,常字的繁体字怎么写。

知识

写字本的拼音怎么写

阅读(935)

本文主要为您介绍写字本的拼音怎么写,内容包括写字的拼音,“写字本”的拼音怎么拼,写字本的拼音带声调是什么。写字本写、字、本的读音是xiě、zì、běn,2113声调为上声、去声、上声汉语拼音是中华人民共和国的汉字“拉丁化”方案5261,于19

知识

作品集序言怎么写

阅读(211)

本文主要为您介绍作品集序言怎么写,内容包括个人作品集的序言怎么写,个人作品集的序言怎么写,作品集的序言和主要内容怎么写啊啊啊啊啊啊啊啊。序言又称序,通常用来说明作者的创作意图和写作经过。也有他人代写的,多用来介绍和评论本书内容。

知识

品味书香征文怎么写

阅读(197)

本文主要为您介绍品味书香征文怎么写,内容包括品味书香征文怎么写,品味书香诵读经典征文怎么写,品味书香诵读经典的征文怎么写。喜欢看曹文轩写的书,尤其令我感动的是他写的《青铜葵花》,作品写苦难大苦难,将苦难写到深刻之极;作品写美大美,将美

知识

探险者与蝴蝶怎么写

阅读(165)

本文主要为您介绍探险者与蝴蝶怎么写,内容包括探险者与蝴蝶的作文示例,探险者与蝴蝶800字作文范文,高考作文探险者与蝴蝶。作文材料来自一篇名叫《轻一点,别点蜡烛》的哲理小品文,作者是江西的一位31岁的年轻作家漆宇勤。材料原文:出于好奇,和

知识

脏的繁体字怎么写

阅读(365)

本文主要为您介绍脏的繁体字怎么写,内容包括“脏”的繁体字怎么写,脏的繁体字怎么写,脏的繁体字怎么写。脏字的繁体与简体写法对照图片如下:

知识

个人成长史怎么写

阅读(191)

本文主要为您介绍个人成长史怎么写,内容包括个人成长史怎么写,写自己的成长经历怎么写,个人成长计划怎样写。我出生在1993年9月29日的夜晚。从我出生那天起,这个家庭可就忙开了。为了给我起个好听的名字,大家可花费了不少时间和精力。爸爸说

知识

家具拼音怎么写

阅读(205)

本文主要为您介绍家具拼音怎么写,内容包括桌子的拼音怎么拼,一年级用拼音写十种家具,“北欧风格橡木家具”的拼音怎么写。桌子拼音:zhuō zi桌子是一种常用家具,有光滑平板,由腿或其它支撑物固定起来的家具,上有平面,下有支柱。可以在上面放东西

知识

大字在田字格里怎么写

阅读(449)

本文主要为您介绍大字在田字格里怎么写,内容包括"人,个,大"三个字在田字格里怎么写,好字在田字格里怎么写(图片),大字在田格里的写法。"人,个,大"三个字在田字格里这样写:

知识

英语绘本读后感怎么写

阅读(353)

本文主要为您介绍英语绘本读后感怎么写,内容包括读“跟上兔子”小学英语分级绘本(Sonw)的读后感怎么写,英语读后感怎么写,英语读后感50字。跟上兔子英语读后感是红色的.还发现兔子有四条粗粗的腿.兔子还长着两只长长的耳朵,立在圆圆的头上,兔子

知识

录音文件英文怎么写

阅读(256)

本文主要为您介绍录音文件英文怎么写,内容包括录音的英文词怎么写,录音的英文怎么写,“看英文录音”用英语怎么写。录音的英文: record读音:英 [rekɔːd] 美 [rekərd]n. 唱片;纪录;记载;经历;前科vi. 记录;录音词汇搭配:

知识

苹果手机怎么写文件

阅读(175)

本文主要为您介绍苹果手机怎么写文件,内容包括苹果手机怎么写文件,并储存,苹果手机怎么写文件,并储存,苹果手机怎么写word。可以在iPhone手机上面下载个WPS Office来编写word文档和excel文档,具体操作步骤如下:首先,打开iPhone手机的A

知识

手机qq怎么写文件

阅读(227)

本文主要为您介绍手机qq怎么写文件,内容包括怎样用手机qq制作电子文档并上传,手机qq怎么写文件,手机qq怎么写文件。用手机qq制作电子文档并上传步骤如下:(演示使用苹果8P手机,其他品牌手机操作大致相同)1单击qq中的电子文档,然后单击“使用其他

知识

招标文件的法律意见书怎么写

阅读(293)

本文主要为您介绍招标文件的法律意见书怎么写,内容包括法律意见书招标文件的法律意见书怎么招标文件的法律意见书怎么,法律意见书格式法律意见书的一般格式是什么样的,怎样写工程项目招标方怎样写工程项目招标方案。律师法律意见书没有统一

知识

文件落实情况怎么写

阅读(422)

本文主要为您介绍文件落实情况怎么写,内容包括整改落实情况怎么写,整改落实情况报告怎么写,贯彻落实会议精神情况汇报怎么写。整改报告应由以下内容组成,报告须加盖公章:缺陷项目表复印件及整改实施方案。整改方案内容包括:缺陷内容、时限要求

知识

纸质文件英文怎么写

阅读(261)

本文主要为您介绍纸质文件英文怎么写,内容包括"纸质文献"用英文怎么说,有人建议将纸质书换成电子书的英文怎么写,一份英文纸质材料怎么翻译成中文打印出来别人说用福昕扫描王,。有人建议将纸质书换成电子书的英文全部释义和例句>> It is sugg

知识

在手机上怎么写文件

阅读(166)

本文主要为您介绍在手机上怎么写文件,内容包括在手机上怎么写文档,怎么在手机上填写文档,在手机上如何写自己的文件。在手机上写文档需先下载办公软件,具体操作如下:先下载wps office 的软件,如下图图标。这款软件下包含了word、Excel等操作

知识

手机怎么写txt文件

阅读(213)

本文主要为您介绍手机怎么写txt文件,内容包括手机怎么写txt格式的文档,手机怎么写txt格式的文档,如何用手机制作txt格式的文件。SDK电子书制作方法: 这里不得不提到一个制作软件:SUN Java2SDKStandard Edition 1.3,可从http://

[/e:loop]