工程目录文件包括./src/main.c和./src/ParseConfig.c和./lib/ParseConfig.h编写一个MakeFile文件,分别实现以下要求: 1. 执行make,能自动完成编译和链接过程,生成静态库libParseConfig.a, 动态库libParseConfig.so和ParseConfig程序,保证生成的可执行文件可以正常运行 2. 执行make static_release命令, 生成的ParseConfig自动strip,并且不依赖libParseConfig.so 3. 执行make debug_release命令, ParseConfi不strip,并且不依赖libParseConfig.so
时间: 2024-03-01 13:49:50 浏览: 63
好的,下面是Makefile文件的编写:
```makefile
# Makefile for ParseConfig
# 定义编译器
CC = gcc
# 定义编译选项
CFLAGS = -Wall -Wextra -Werror -I./lib
# 定义链接选项
LDFLAGS = -L./lib -lParseConfig
# 定义动态库名字和静态库名字
LIBNAME = ParseConfig
DYNLIBNAME = lib$(LIBNAME).so
STALIBNAME = lib$(LIBNAME).a
# 定义源文件和目标文件
SRC = ./src/main.c ./src/ParseConfig.c
OBJ = $(SRC:.c=.o)
# 定义可执行文件名字
TARGET = ParseConfig
# 默认生成静态库、动态库和可执行文件
all: $(DYNLIBNAME) $(STALIBNAME) $(TARGET)
# 链接生成动态库
$(DYNLIBNAME): ./src/ParseConfig.o
$(CC) -shared -o $@ $^
# 链接生成静态库
$(STALIBNAME): ./src/ParseConfig.o
ar rcs $@ $^
# 编译生成目标文件
%.o: %.c
$(CC) $(CFLAGS) -fPIC -c -o $@ $<
# 链接生成可执行文件
$(TARGET): $(OBJ)
$(CC) $(LDFLAGS) -o $@ $^
# 生成strip后的可执行文件
static_release: $(TARGET)
strip $(TARGET)
# 生成不strip的可执行文件
debug_release: CFLAGS += -g
debug_release: $(TARGET)
# 清除生成的目标文件、库文件和可执行文件
clean:
rm -f $(OBJ) $(DYNLIBNAME) $(STALIBNAME) $(TARGET)
.PHONY: all static_release debug_release clean
```
上面的Makefile文件分别定义了编译器、编译选项、链接选项、动态库名字和静态库名字、源文件和目标文件、可执行文件名字等。同时,还定义了生成动态库、静态库和可执行文件的规则,以及生成strip后的可执行文件和不strip的可执行文件的规则。最后,还定义了清除生成的目标文件、库文件和可执行文件的规则。
执行make命令即可生成静态库libParseConfig.a,动态库libParseConfig.so和ParseConfig程序;执行make static_release命令,会生成strip后的ParseConfig可执行文件;执行make debug_release命令,会生成不strip的ParseConfig可执行文件。
注意:Makefile文件中的缩进需要使用Tab键,而不能使用空格键。
阅读全文