[zz]makefile写法简单示例

时间:2022-09-01 21:00:09
实例1:
OBJ = a.o b.o main.oH = a.h b.h
DBG = -g

main : $(OBJ)
gcc $(OBJ) $(DBG) -o main
%.o : %.cpp $(H)
g++ -c $< -o $@


实例2:

作为Linux或Unix下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般开发情况下,大家都是手工写一个简单Makefile。下面先给一个最简单的示例代码:

#makefile示例
object= main.o function.o

change:$(object)
cc -o change $(object)
mv change $(HOME)/bin
main.o:
cc -c main.c -I$(HOME)/program/date/include
function.o:
cc -c function.c -I$(HOME)/program/date/include

clean:
rm change $(object)
说明:
      这里是使用unix下的CC编译器,当然也能换成gcc
      最后生成的可执行文件名:change
      源程序文件:main.c function.c
      .h文件(头文件)所在目录:$(HOME)/program/date/include
      中间目标文件名:main.o function.o
     当在shall中执行命令:
make clean
将会执行
rm change $(object)
删除文件: change main.o function.o
语句:
mv change $(HOME)/bin
将最终生成的可执行文件移动到
$(HOME)/bin
这一步可以不要,但这样符合目录管理规范,而且$(HOME)/bin一般在环境变量PATH中有设置,这样可以在任意目录下时也能运行可执行文件。

注意:
      makefile编辑时另起一行,注意不能用空格,要用TAB键,否则会报错
      makefile里面的注释用#,其它都会报错

Makefile简单介绍
Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。
Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
 
实例3:
.PHONY: all clean

all : main

main : main.o a.o b.o
\TAB\ g++ -o main main.o a.o b.o

main.o : main.cpp b.h
\TAB\ g++ -o main.o -c main.cpp

a.o : a.cpp a.h
\TAB\ g++ -o a.o -c a.cpp

b.o : b.cpp b.h a.h
\TAB\ g++ -o b.o -c b.cpp

clean:
\TAB\ @rm -f a.o b.o main.o main