目录文件包括./src/main.c和./src/ParseConfig.c和./lib/ParseConfig.h,编写一个MakeFile,完成以下要求: 1、执行make,能自动完成编译和链接过程,生成libParseConfig.a, libParseConfig.so和ParseConfig程序,并将动态库拷贝到目录/lib下 2、 执行make release, 编译生成的.o文件存放于RELEASE目录,编译参数包含-Os -DNDEBUG, 链接完成之后对libParseConfig.so和ParseConfig自动进行strip 3、执行make debug, 编译生成的.o文件存放于DEBUG目录,,编译参数包含-g,链接完成之后libParseConfig.so和ParseConfi不strip 4、 执行make static_release, 生成的ParseConfig自动strip,并且不依赖libParseConfig.so 5、执行make debug_release, ParseConfi不strip,并且不依赖libParseConfig.so 6、执行make clean, 能够清除所有的二进制文件和中间文件
时间: 2024-02-24 08:56:55 浏览: 52
以下是Makefile的代码实现:
```
# 定义编译器
CC = gcc
# 定义编译参数
CFLAGS = -Wall
# 定义链接参数
LDFLAGS = -L./lib
# 定义目标文件名
TARGET = ParseConfig
# 定义源文件目录
SRC_DIR = ./src
# 定义RELEASE目录
RELEASE_DIR = ./RELEASE
# 定义DEBUG目录
DEBUG_DIR = ./DEBUG
# 定义目标文件
OBJS = $(SRC_DIR)/main.o $(SRC_DIR)/ParseConfig.o
# 定义动态库文件名
SHARED_LIB = libParseConfig.so
# 定义静态库文件名
STATIC_LIB = libParseConfig.a
# 默认目标
all: $(SHARED_LIB) $(STATIC_LIB) $(TARGET)
# 编译生成动态库
$(SHARED_LIB): $(SRC_DIR)/ParseConfig.o
$(CC) -shared -o $@ $^
cp $(SHARED_LIB) ./lib/
# 编译生成静态库
$(STATIC_LIB): $(SRC_DIR)/ParseConfig.o
ar -rcs $@ $^
# 编译生成目标文件
$(TARGET): $(OBJS)
$(CC) -o $@ $^ $(LDFLAGS) -lParseConfig
# release目标
release: CFLAGS += -Os -DNDEBUG
release: clean
release: $(TARGET)
mkdir -p $(RELEASE_DIR)
$(CC) -o $(RELEASE_DIR)/$(TARGET) $(OBJS) $(LDFLAGS) -lParseConfig
strip $(RELEASE_DIR)/$(TARGET)
strip $(SHARED_LIB)
# debug目标
debug: CFLAGS += -g
debug: clean
debug: $(TARGET)
mkdir -p $(DEBUG_DIR)
$(CC) -o $(DEBUG_DIR)/$(TARGET) $(OBJS) $(LDFLAGS) -lParseConfig
# static_release目标
static_release: CFLAGS += -Os -DNDEBUG
static_release: clean
static_release: $(OBJS)
$(CC) -o $(TARGET) $(OBJS) -L./lib -lParseConfig -static
strip $(TARGET)
# debug_release目标
debug_release: CFLAGS += -g
debug_release: clean
debug_release: $(OBJS)
$(CC) -o $(TARGET) $(OBJS) -L./lib -lParseConfig -static
# 清除目标文件和中间文件
clean:
rm -rf $(TARGET) $(OBJS) $(RELEASE_DIR) $(DEBUG_DIR) $(SHARED_LIB) $(STATIC_LIB)
```
使用方法:
- 执行`make`,能够自动完成编译和链接过程,生成`libParseConfig.a`,`libParseConfig.so`和`ParseConfig`程序,并将动态库拷贝到目录`./lib`下;
- 执行`make release`,编译生成的`.o`文件存放于`./RELEASE`目录,编译参数包含`-Os -DNDEBUG`,链接完成之后对`libParseConfig.so`和`ParseConfig`自动进行`strip`;
- 执行`make debug`,编译生成的`.o`文件存放于`./DEBUG`目录,编译参数包含`-g`,链接完成之后`libParseConfig.so`和`ParseConfig`不`strip`;
- 执行`make static_release`,生成的`ParseConfig`自动`strip`,并且不依赖`libParseConfig.so`;
- 执行`make debug_release`,`ParseConfig`不`strip`,并且不依赖`libParseConfig.so`;
- 执行`make clean`,能够清除所有的二进制文件和中间文件。
阅读全文