CC =gcc
TARGET = test_main
OBJS = 1.o 2.o 3.o 4.o 5.o
SRC = $(OBJS:%.o=%.c)
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS)
$(OBJS):%.o:%.c
$(CC) -c $< -o $@ //$(CC) -c $<
clean:
rm *.o (TARGET)
首先,
$@:目标对象
$^:所有依赖对象
$<:第一个依赖对象
该目录下总共有6个.c文件
1.c 2.c 3.c 4.c 5.c test_main.c
**SRC = $(OBJS:%.o=%.c)**该行作用相当于
SRC = 1.c 2.c 3.c 4.c 5.c
1
$(OBJS):%.o:%.c
$(CC) -c $< -o $@
相当于
$(OBJS):$(SRC)
$(CC) -c 1.c 2.c 3.c 4.c 5.c -o 1.o 2.o 3.o 4.o 5.o
2
$(TARGET):$(OBJS)
$(CC) -o $(TARGET) $(OBJS)
相当于
$(TARGET):$(OBJS)
$(CC) -o test_main 1.o 2.o 3.o 4.o 5.o
Makefile的编写 我觉得就是 gcc 命令
介绍下gcc
gcc -参数
-I(i的大写): 指定头文件路径(绝对路径/相对路径都可以)
-L:指定连接的动态库或者静态库路径(绝对路径/相对路径都可以)
-fPIC:要生成动态库.o文件要加 -fPIC
-shared: 生成.so文件
gcc -c 1.c //生成1.o 文件
gcc -o main main.c -I ./include/ //编译
生成动态库以及链接动态库
gcc -Wall -fPIC -o libmytest.o -c libmytest.c
gcc -shared -o libmytest.so libmytest.o
gcc -Wall -fPIC -shared libmytest.c -o libmytest.so
方法1:
gcc -o test_main test_main.c ./libmytest.so //连接生成的 .so文件
方法2:
需将libmytest.so复制到系统lib下
gcc -o test_main.c test_main -lmytest -L ./.
方法三:
gcc -o test_main.c test_main -I./include -L./lib -lmytest
如果libmytest.so在当前路径下的lib中,则能编译过,但运行却好不到这个库
需添加环境变量 export LD_LIBRARY_PATH=路径
或者 gcc -o test_main.c test_main -I./include -L./lib -lmytest -Wl,R lib库路径
-Wl,rpath=lib库路径路径
makefile 失效,查看 ls ./config/
设置 make config T=x86_64-native-linuxapp-gcc