例子:
main.c(打印数字的和与差。和函数在一个sum.o(gcc -c sum.c得到)文件中,差函数在libsub.a(gcc -c sub.c||ar -r libsub.a sub.c得到)库中)。
#include<stdio.h> extern int sum(int i,int j); extern int sub(int i,int j); int global = 0; int main(){ int i=4; int j=3; printf("sum:%d\n",sum(i,j)); printf("sub:%d\n",sub(i,j)); printf("global:%d\n",global); return 0; }
int sub(int i,int j){ return (i-j); }
#include "global.h" int sum(int i,int j){ global = 4; return (i+j); }global.h
extern int global;
CC = gcc AR = ar RM = rm CP = cp ECHO = echo INCLUDES = -I./ CFLAGS += -O2 $(INCLUDES) include tool.mak TARGET = libyuerapi.a LIBS = libsub.a OBJS = sum.o all:$(TARGET) $(TARGET):$(OBJS) $(LIBS) $(BUILD_LIBRARY) %.o:%.c $(CC) -c $(CFLAGS) $< -o $@ clean: $(RM) *.o $(TARGET)too.mak
define BUILD_LIBRARY $(if $(wildcard $@),@$(RM) $@) $(if $(wildcard ar.mac),@$(RM) ar.mac) $(if $(filter lib%.a, $^), @$(ECHO) CREATE $@ > ar.mac @$(ECHO) SAVE >> ar.mac @$(ECHO) END >> ar.mac @$(AR) -M < ar.mac) $(if $(filter %.o,$^),@$(AR) -q $@ $(filter %.o, $^)) $(if $(filter %.a, $^), @$(ECHO) OPEN $@ > ar.mac $(foreach LIB, $(filter lib%.a, $^), @echo ADDLIB $(LIB) >> ar.mac) @$(ECHO) SAVE >> ar.mac @$(ECHO) END >> ar.mac @$(AR) -M < ar.mac) endef