makefile范例

单个文件夹下,指定源文件进行编译,更改头文件后会重新编译

srcs=src1.c src2.c prog.c
objs:=$(srcs:.c=.o)
deps:=$(srcs:.c=.d)

CFLAGS=-c -g -Wall

prog:$(objs)
	gcc -o prog $^

-include $(deps)
$(objs):%.o:%.c
	gcc $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -o $@ $<


.PHONY: clean
clean:
	rm -rf prog *.o *.d
单个文件夹下,编译当前文件夹下的所有c文件,更改头文件后会重新编译

srcs=$(wildcard *.c)
objs:=$(srcs:.c=.o)
deps:=$(srcs:.c=.d)

CFLAGS=-c -g -Wall

prog:$(objs)
	gcc -o prog $^

-include $(deps)
$(objs):%.o:%.c
	gcc $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -o $@ $<


.PHONY: clean
clean:
	rm -rf prog *.o *.d
单个文件夹下,编译静态库

srcs:=$(wildcard *.c)
objs:=$(srcs:.c=.o)
deps:=$(srcs:.c=.d)

CFLAGS=-c -g -Wall

prog:libprog.a
	gcc -L. -lprog -o prog 

libprog.a:$(objs)
	ar r libprog.a $(objs)

-include $(deps)
$(objs):%.o:%.c
	gcc $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -o $@ $<


.PHONY: clean
clean:
	rm -rf prog *.o *.d *.a
单个文件夹下,编译静态库文件,obj文件放入obj文件,d文件放入dep文件夹,静态库文件放入lib文件夹

srcs:=src1.c src2.c src3.c
objs:=$(srcs:.c=.o)
deps:=$(srcs:.c=.d)

vpath %.a ./lib
vpath %.o ./obj

CFLAGS=-c -g -Wall

prog:libprog.a prog.o
	gcc obj/prog.o -L./lib -lprog -o prog 


libprog.a:$(objs)
	ar r lib/libprog.a $(objs:%=obj/%)

-include dep/prog.d
prog.o:prog.c
	gcc $(CFLAGS) -MMD -MP -MF"$(@:%.o=dep/%.d)" -MT"$@" -o obj/$@ $<

-include $(deps:%=dep/%)
$(objs):%.o:%.c
	gcc $(CFLAGS) -MMD -MP -MF"$(@:%.o=dep/%.d)" -MT"$@" -o obj/$@ $<



.PHONY: clean
clean:
	rm -rf prog lib/*.a obj/*.o dep/*.d
单个文件夹下,编译动态库文件
运行程序命令:LD_LIBRARY_PATH=$PWD/lib ./prog

srcs:=$(wildcard *.c)
objs:=$(srcs:.c=.o)
deps:=$(srcs:.c=.d)

CFLAGS=-c -g -Wall -fPIC

prog:libprog.so
	gcc -L. -lprog -o prog 

libprog.so:$(objs)
	gcc -shared -fPIC $(objs) -o libprog.so 

-include $(deps)
$(objs):%.o:%.c
	gcc $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" $< -o $@


.PHONY: clean
clean:
	rm -rf prog *.o *.d *.so

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值