1.如何写Makefile
hello: hello.o
gcc -o hello hello.o
hello.o: hello.c
gcc -c hello.c
clean:
rm -f hello *.o *.bak *~这就是最简单的helloworld的makefile有三个目标:hello、hello.o、clean,最上面的那个是默认目标,make不带参数时,找的就是这个目标。目标回溯过程:
目标hello =>; 依赖于hello.o =>; 目标hello.o =>; 依赖于 hello.c => hello.c =>; 成功
目标生成过程:
gcc -c hello.c =>; 得到hello.o =>;执行gcc -o hello hello.o =>; 得到hello => make成功!示例:
make
make hello.o
make clean
2.linux makefile怎么写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
INC_PATH := -I./include/
LIB_PATH := -L./lib/
LIBS := $(LIB_PATH) -lerr -larm
CC := gcc
LD := gcc
CFLAGS := -O2 -Wall $(INC_PATH)
SRC_PATH := ./source
SOURCE := $(SRC_PATH)/a.c\
$(SRC_PATH)/b.c\
$(SRC_PATH)/c.c
TARGET := target
OBJS := a.o b.o c.o
$(TARGET): $(OBJS)
$(LD) -O2 -o $(TARGET) $(OBJS) $(LIBS)
a.o : $(SRC_PATH)/a.c
$(CC) $(CFLAGS) -c -o $@ $
3.如何自己编写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.o / insert.o search.o files.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=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 $@ $^
6.如何写Makefile
hello: hello.o gcc -o hello hello.ohello.o: hello.c gcc -c hello.cclean: rm -f hello *.o *.bak *~这就是最简单的helloworld的makefile有三个目标:hello、hello.o、clean,最上面的那个是默认目标,make不带参数时,找的就是这个目标。
目标回溯过程: 目标hello => 依赖于hello.o => 目标hello.o => 依赖于 hello.c => hello.c => 成功目标生成过程: gcc -c hello.c => 得到hello.o =>执行gcc -o hello hello.o => 得到hello => make成功!示例:makemake hello.omake clean。
7.makefile怎么写
如果你想写 Makefile 的话,那么你只要用一个不将制表符过滤掉的文本编辑器就可以了,用 vi/vim 可以,用 emacs 可以,用其它的 geditor 也是可以的,只要是文本编辑器就可以了。
你在 win 下也可以用记事本写 Makefile ,当然要确保你的系统已经安装了 make 了(最好了 GNU make)。Makefile 是不需要后缀的,也就是说 Makefile 的文件名就是 Makefile。
下面我给出一个我写的一个简单的 Makefile 给你参考一下吧:# Makefile for 'kmp'CC=gccCFLAGS=-gkmp: kmpindex.o getnext.o main.o $(CC) -o kmp kmpindex.o getnext.o main.okmpindex.o: kmpindex.c kmp.h $(CC) -c kmpindex.cgetnext.o: getnext.c kmp.h $(CC) -c getnext.cmain.o: main.c kmp.h $(CC) -c main.cclean: rm -f *.o# END没有太多的注释,因为是用于小测试的。希望对你有所帮助。
转载请注明出处育才学习网 » makefileclean怎么写