写一个简单的C程序
test.h
#ifndef _TEST_H_
#define _TEST_H_
#include <stdio.h>
void func1();
void func2();
#endif
test.c
#include "test.h"
void func1(){
printf("Haha,Func1!\n");
}
void func2(){
printf("Haha,Func2!\n");
}
/*
void main(){
func1();
func2();
return ;
}*/
书写Makefile
GC=gcc
LD=ld
AR=ar
RM=rm -f
CFLAGS=-c
OBJ=test.o
TARGET_STD=libtest.a
TARFET_DLL=libtest.so
TARGET=test
%o:%c
$(GC) $(CFLAGS) $^ -o $(OBJ)#生存.o目标
$(RM) $(TARGET_STD) $(TARGET_DLL) $(TARGET)#清空之前生成目标文件
#test:$(TARGET)
#$(TARGET):$(OBJ)
# $(GC) -o $(TARGET) $(OBJ)#生成可执行目标
build:$(TARGET_STD)
$(TARGET_STD):$(OBJ)
$(AR) -r $(TARGET_STD) $(OBJ)#生成静态库
dll:$(TARFET_DLL)
$(TARFET_DLL):$(OBJ)
$(LD) -shared -o $(TARFET_DLL) $(OBJ)#生成动态库
clean:
$(RM) $(OBJ) $(TARGET_STD) $(TARGET_DLL) $(TARGET)#清空生成文件
执行make或make test生成test可执行文件
执行make build生成静态库
执行make dll生成动态库
执行make clean清空
2使用库文件
编写文件main.c
#include "./Test/test.h"//调用头文件,可以不加
void main(){
func1();
func2();
return ;
}
书写makefile
使用静态库
GC=gcc
main.o:main.c
$(GC) -o main.o -c main.c -I./Test -L./Test -ltest -static #libtest.a放在路径下
#加上-c生成的是中间文件
build:main
main:main.o
$(GC) -o main main.o -I./Test -L./Test -ltest -static
#由中间文件生成目标文件 ,-I可以不带,调试也没问题
clean:
rm -r main.o main
使用动态库,首先将libtest.so拷贝至/usr/lib -L./Test---->-L.仍需指明lib路径
gcc -o main main.c -L./Test -ltest
*gcc -o ... -c ...加上-c生成目标文件为中间文件