本文轉載自 https://blog.csdn.net/aflyeaglenku/article/details/47779941
文件列表:
代碼文件
/*以下內容保存為“minus.c”*/
#include "my_math.h" int my_minus(int x, int y) { return x - y; }
/*以下內容保存為“minus.c”*/
#include "my_math.h" int my_plus(int x, int y) { return x+y; }
/*以下內容保存為“lib_test.c”*/
#include "my_math.h" int main() { printf("[my_plus ] = %d\n",my_plus(8,8)); printf("[my_minus ] = %d\n",my_minus(8,8)); }
makefile文件
/*以下內容保存為“lib.mak”*/
SHELL = /bin/sh CC = gcc AR = ar CFLAG = -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/sh CC = gcc INCLUDE_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