如何写一个makefile



第一版
目标:依赖
 命令
#命令前是tab键
test:main.o utils.o
 gcc -o main.o utils.o -lm
main.o:main.c
 gcc -c main.c -lm
utils.o:utils.c
 gcc -c utils.c -lm
#-lm是因为程序里用了math.h

========================================

第二版
常见的自动变量
$@:目标
$^:依赖的不重复全部项
$<:依赖的第一项
$*:不包含扩展名的目标文件名称
$+:所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$?:所有时间戳比目标文件晚的依赖文件,并以空格分开
$%:如果目标是归档成员,则该变量表示目标的归档成员名称
test:main.o utils.o
 gcc -o $@ $^ -lm
main.o:main.c
 gcc -c $^ -lm
utils.o:utils.c
 gcc -c $^ -lm
 

===============================================================

第三版
.c.o表示所有的 .o文件都是依赖与相应的.c文件 
test:main.o utils.o
 gcc -o $@ $^ -lm  
.c.o :
 gcc -c $< -lm


===================================================================

第四版
常见的预定义变量
AR             库文件维护程序的名称,默认值为ar
AS             汇编程序的名称,默认值为as
CC             C编译器的名称,默认值为cc
CPP           C预编译器的名称,默认值为$(CC) –E
CXX           C++编译器的名称,默认值为g++
FC              FORTRAN编译器的名称,默认值为f77
RM            文件删除程序的名称,默认值为rm –f
ARFLAGS   库文件维护程序的选项,无默认值
ASFLAGS   汇编程序的选项,无默认值
CFLAGS      C编译器的选项,无默认值
CPPFLAGS  C预编译的选项,无默认值
CXXFLAGS  C++编译器的选项,无默认值
FFLAGS       FORTRAN编译器的选项,无默认值

CC = cc
CFLAGS = -O
CFILES = *.c
LIBS=-lm
test:main.o utils.o
 $(CC) -o $@ $^ $(LIBS)
.c.o :
 $(CC) -c $< $(LIBS)
 
最后需要加上clean
scratch:
 make test
#clean无法执行的时候添加这个
 make clean
test:main.o utils.o
 gcc -o $@ $^ -lm  
.c.o :
 gcc -c $< -lm
#.PHONY:伪目标,不产生目标文件的意思
.PHONY: clean
clean:
 rm -f *.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值