概述
关于Makefile的介绍,可以参考Makefile文件编写及make命令使用简介。
Makefile在linux上编程中不可或缺。不管是大型的工程还是只有几个c文件的小项目,如果每次都要从头开始编写Makefile,就是一个重复造轮子的过程了。
因为Makefile中一些基本的框架和语句都是一样的,这里就结合我编写Makefile的一些经历,提取了一个精简的版本,可以直接在src子目录中直接使用。
当然,要想达到项目中的特定目的,还需要编写顶层Makefile。
Makefile源码
- 该makefile用于将当前目录下所有的.c源文件编译为.o,最后生成可执行文件a.out
CROSS_COMPILE ?=
EXTRA_CFLAGS += -Wall -Wextra -O2 -fPIC -g
SRC = $(wildcard *.c)
OBJECTS = $(SRC:.c=.o)
OUTPUT = a.out
all: $(OUTPUT)
$(OUTPUT): $(OBJECTS)
$(CROSS_COMPILE)gcc $(EXTRA_CFLAGS) -o $@ $^
%.o: %.c
$(CROSS_COMPILE)gcc $(EXTRA_CFLAGS) -MMD -o $@ -c $^
-include $(OBJECTS:.o=.d)
clean:
$(RM) *.[od]
PHONY: all clean
在此基础上,改变默认目标文件,可编译出.a, .so和可执行文件。
- 静态库(依赖于.o):
ar -rc $@ $^
- 动态库(依赖于.o):
gcc -shared $@ $^
也可以在上层Makefile中调用该子目录下的Makefile,达到管理子目录的效果。
总结
使用此Makefile模板,即可在此基础上根据项目需求修改开发。
在开发和使用中,要明白每条语句和指令的意义,这样才能在出现问题时迅速定位及解决。
更多关于Makefile的介绍,请参考Makefile文件编写及make命令使用简介