#生成动态库 SOURCE := $(wildcard *.c) OBJECT := $(patsubst %.c,%.o,$(wildcard *.c)) LIB := directiver.h macro.h queue.h shared.h uart.h TARGET := libsdk.so CC := gcc DIR := $(shell mkdir -p ../include) RM := rm -rf all:$(TARGET) cptarget cphead $(TARGET):$(OBJECT) $(CC) $(SOURCE) $(LIB) -c -fPIC -I./include $(CC) -shared $(OBJECT) -o $@ -lpthread cptarget: cp $(TARGET) /lib cphead: $(DIR) cp $(LIB) ../include *.o:*.c $(CC) $^ -c $@ .PHONY:clean cplib cphead clean: $(RM) *.so *.o *.gch $(RM) ../include
时间: 2024-04-28 10:19:23 浏览: 6
这段makefile文件是生成动态库的示例代码,它包含了以下几个步骤:
1. 定义了源文件和目标文件的变量;
2. 定义了动态库的名称和编译器;
3. 定义了生成头文件的目录;
4. 定义了清理目标、头文件和中间文件的命令;
5. 定义了生成动态库的命令;
6. 定义了拷贝动态库和头文件的命令;
7. 定义了编译源文件的命令。
具体地,这段makefile文件的执行流程如下:
1. 执行all目标,生成动态库和拷贝头文件;
2. 执行生成动态库的命令,分别编译源文件和链接生成动态库;
3. 执行拷贝动态库的命令,将动态库拷贝到/lib目录下;
4. 执行拷贝头文件的命令,将头文件拷贝到../include目录下;
5. 执行clean目标,清理生成的动态库、中间文件和头文件目录。
需要注意的是,这段makefile文件中使用了一些makefile的高级特性,比如wildcard、patsubst、shell等,需要对makefile有一定的了解才能看懂。同时,这段makefile文件的具体实现也与项目的结构和需求有关,需要根据实际情况进行修改。
相关问题
SRCS := $(wildcard *.c) OBJS := $(patsubst %.c, %.o, $(SRCS))
这是一个 Makefile 文件的两行代码,其中:
- `SRCS := $(wildcard *.c)` 表示将当前目录中所有的 .c 文件名列表赋值给 SRCS 变量。
- `OBJS := $(patsubst %.c, %.o, $(SRCS))` 表示将 SRCS 变量中的 .c 文件名列表分别替换成 .o 文件名列表,并赋值给 OBJS 变量。其中,`$(patsubst %.c, %.o, $(SRCS))` 表示将 SRCS 变量中的每个 .c 文件名都替换成对应的 .o 文件名。`$(patsubst pattern,replacement,text)` 是 Makefile 中的一个函数,表示将 text 中的所有 pattern 替换成 replacement。
src = $(wildcard ./*.c) #obj = $(patsubst %.c, %.o, $(src)) obj = $(src:%.c=%.o)
这是一个Makefile中的变量定义,用于自动化编译C程序。其中,$(wildcard ./*.c)是通配符函数,用于查找当前目录下所有以.c为后缀名的文件,并将文件名列表存储在变量src中。$(patsubst %.c, %.o, $(src))是模式替换函数,用于将src变量中的.c文件替换成.o文件,并将替换后的文件名列表存储在变量obj中。另一种写法$(src:%.c=%.o)是变量替换函数,用于将变量src中的.c文件替换成.o文件,并将替换后的文件名列表存储在变量obj中。最终,变量obj中存储了当前目录下所有以.c为后缀名的文件所对应的.o文件名列表,这些.o文件可以作为编译目标文件的依赖项。