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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章