#========命令==[ 简单示例根据实际修改添加 ]
CC = gcc #c语言编译命令
AR = ar #编译静态库命令
LD = ld #编译动态库命令
RM = rm -rf #强制删除命令,一般用于删除 .o 文件
#========参数(nameFLAGS) ===================
#C语言编译器参数
CFLAGS = -g -Wall $(HFFLAGS)
#编辑静态库参数 .a 静态库后缀
AFLAGS = -r
#编辑动态库参数 .so 动态库后缀
SOFLAGS = -fPIC -shared
#FH(head file)头文件路径参数 -I.(当前路径) 默认有:/usr/local/include/ 和 /usr/include/
HFFLAGS = -I.
#LD(library dir)库路径参数 -L.(当前路径) 默认有:/usr/local/lib/ 和 /usr/lib/
LDFLAGS = -L.
#LD(library name)库名称参数 -lNAME 等价搜索路径下的 libNAME.a 或 libNAME.so
#非系统默认库必须指明使用那些库 如:libpthread.a Linux系统下的线程库
LMFLAGS = -lWorld -lpthread
LDMFLAGS = $(LDFLAGS) $(LMFLAGS)
#优化参数
OFLAGS = -O0
#========目标==============================
#所有生产目标
all : libaray excute
#编译成库的文件名 如:libWorld.so
libaray : libWorld.so
#编程成执行文件的文件名 如:hello
excute : hello
#========编译==============================
#%o:%c 旧格式 .c.o: 所有的[.c]文件生成相应的[.o]文件。若生成目标是"a.o b.o",那么"%c"就是"a.c b.c"。
#[Tab]$(CC)则替换为前面赋值的内容,每个命令前面必定为Tab
%o:%c
$(CC) $(CFLAGS) -c $<
#编译执行文件
hello :hello.o libWorld.so
$(CC) $(LDMFLAGS) -o$@ $?
#编译动态库
libWorld.so:World.o
$(CC) $(SOFLAGS) -o$@ $?
#可用make -f makefile.steel clear清除
clean:
$(RM) *.o
#======== 以下为解释,非makefile脚本
$@: 规则中的目标名(也就是规则名)。$<: 规则中的依赖项目,只代表规则所有依赖项目中的第一项!$^: 规则中所有的依赖项目。$?: 规则中时间新于目标的依赖项目
make -f makefile.linux clear调用clean
make -f makefile.linux > log.txt 将编译过程的内容保存在log.txt中
makefile 格式
最新推荐文章于 2023-03-18 17:27:53 发布