makefile 多级目录文件编写生产动态库
时间: 2023-09-08 11:03:15 浏览: 96
在编写makefile时,我们需要考虑多级目录文件的情况并生成动态库。下面是一种可行的方法:
首先,我们需要定义一些变量,例如`CC`表示编译器,`CFLAGS`表示编译选项,`LDFLAGS`表示链接选项,`SRC_DIR`表示源代码目录,`OBJ_DIR`表示目标文件目录,`LIB_DIR`表示动态库输出目录,`LIB_NAME`表示动态库的名字。
接下来,我们可以使用makefile的自动变量来获取所有的源文件路径和目标文件路径。我们可以使用`wildcard`函数来获取源文件路径,使用`patsubst`函数将源文件路径转换为目标文件路径。然后,我们可以使用`$(OBJ_DIR)`和`$(LIB_DIR)`变量来创建目录。
```makefile
CC = gcc
CFLAGS = -Wall -Werror
LDFLAGS = -shared
SRC_DIR = src
OBJ_DIR = obj
LIB_DIR = lib
LIB_NAME = mylib.so
# 获取源文件路径
SRC_FILES := $(wildcard $(SRC_DIR)/*.c)
# 将源文件路径转换为目标文件路径
OBJ_FILES := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC_FILES))
# 创建目标文件目录
$(shell mkdir -p $(OBJ_DIR) $(LIB_DIR))
all: $(LIB_DIR)/$(LIB_NAME)
# 编译动态库
$(LIB_DIR)/$(LIB_NAME): $(OBJ_FILES)
$(CC) $(LDFLAGS) $^ -o $@
# 编译目标文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(OBJ_DIR) $(LIB_DIR)
```
现在,我们可以在命令行中使用`make`命令来编译生成动态库。makefile会自动找到源文件并将其编译为目标文件,然后将目标文件链接为一个动态库。最后,动态库将被输出到指定的目录中。
希望以上解答对您有帮助。
阅读全文