本文转载自 https://blog.youkuaiyun.com/aflyeaglenku/article/details/47779941
文件列表:
代码文件
/*以下内容保存为“minus.c”*/
#include "my_math.h"
int my_minus(int x, inty)
{return x -y;
}
/*以下内容保存为“minus.c”*/
#include "my_math.h"
int my_plus(int x, inty)
{return x+y;
}
/*以下内容保存为“lib_test.c”*/
#include "my_math.h"
intmain()
{
printf("[my_plus ] = %d",my_plus(8,8));
printf("[my_minus ] = %d",my_minus(8,8));
}
makefile文件
/*以下内容保存为“lib.mak”*/
SHELL = /bin/shCC= gccAR= arCFLAG= -O2 -W -Wall
INCLUDE_PATH= -I.
LIB_TARGET= ./libmath.a
PLUS_OBJ=plus.o
PLUS_SRC= ./plus.c
MIN_OBJ=minus.o
MIN_SRC= ./minus.c
all : $(LIB_TARGET)
$(PLUS_OBJ): $(PLUS_SRC)
$(CC) $(CFLAG) $(INCLUDE_PATH)-c $(PLUS_SRC)
$(MIN_OBJ): $(MIN_SRC)
$(CC) $(CFLAG) $(INCLUDE_PATH)-c $(MIN_SRC)
$(LIB_TARGET) : $(PLUS_OBJ) $(MIN_OBJ)
$(AR) cq $@ $^
rm -f $(PLUS_OBJ)rm -f $(MIN_OBJ)
clean:rm -f $(PLUS_OBJ)rm -f $(LIB_TARGET)
notes:
$@ --代表目标文件(target)
$^ --代表所有的依赖文件(components)
$< --代表第一个依赖文件(components中最左边的那个)。
$? --代表当前目标所依赖的文件列表中比当前目标文件还要新的文件。
$* --不包括后缀名的当前依赖文件的名字
/*以下内容保存为“app.mak”*/
SHELL = /bin/shCC= gccINCLUDE_PATH= -I.
TEST_TARGET= ./test
TEST_SRC= ./lib_test.c
LDFLAGS := ./libmath.a
all :
$(CC)-g $(TEST_SRC) $(LDFLAGS) -o $(TEST_TARGET) $(INCLUDE_PATH)
clean:rm -f $(TEST_TARGET)
notes:
-g 可执行程序包含调试信息
-o 指定输出文件名
-c 只编译不链接
编译生成静态库文件
make -f lib.mak
编译生成可执行文件
make -f app.mak