makefile怎么写( 二 )


我们是不是可以向C语言中定义一个宏一样定义它呢?当然可以:
【makefile怎么写】makefile:
objects = main.o print.o #应该叫变量的声明更合适
helloworld : $(objects) //声明了变量以后使用就要$()了
gcc -o helloworld$(objects)
mian.o : mian.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean :
rm helloworld $(objects)
修改完毕,这样使用了变量的话在很多文件的工程中就能体现出方便性了 。
三:再进一步:
再看一下,为没一个*.o文件都写一句gcc -c main.c是不是显得多余了,
能不能把它干掉?而且 main.c 和print.c都需要print.h,为每一个都写上是
不是多余了,能不能再改进?
能,当然能了:
makefile:
objects = main.o print.o
helloworld : $(objects)
gcc -o helloworld$(objects)
$(objects) : print.h # 都依赖print.h
mian.o : mian.c #干掉了gcc -c main.c 让Gun make自动推导了 。
print.o : print.c
clean :
rm helloworld $(objects)
4. 如何编写makefile 你先用gcc把它给编译出来 。
然后再想用makefilegcc最一般的用法就是:gcc -o 要生成的可执行文件名 源代码文件名如:gcc -o hello.x hello.c如果一些头文件要指明的话,可以这样:gcc -o hello.x -I头文件所在的文件夹 -l一些库名 hello.c最通常,我们用到一些数学库 。gcc -o hello.x -lm hello.cmakefile的话,你可以基于上述的语句进行修改:建议你看点资料,或一些典型的例子 。
但是注意的是规则那一行,得用Tab键打头 。hello.x : hello.o gcc -o hello.x hello.o (这一行,得用Tab打头)hello.o : hello.c 头文件 gcc -c hello.o hello.c -I头文件所在目录 -lm (这一行,得用Tab打头) 。
5. 如何写makefile? CC=gcc
TARGET=compute
DEPEND=compute.o mymath.o
$(TARGET):$(DEPEND)
(这前面是一个TAB键,不要有空格)$(CC) -o [email protected] $^ -g -Wall
.c.o:
(这前面是一个TAB键,不要有空格) $(CC) -c $^ -g
.PHONY:clean
clean:
(这前面是一个TAB键,不要有空格) rm $(DEPEND)
#下面为说明
#Makefile的格式为Target(目标):depend(依赖)
# (TAB)command(生成目标的命令)
#其中:%@ 为目标,$^ 为所有的依赖文件,$
6. 如何写一个简单的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) 。