工程目录文件包括./src/main.c和./src/ParseConfig.c 2. 编写一个MakeFile,完成以下要求: a. 执行make,能自动完成编译和连接过程,生成libParseConfig.a, libParseConfig.so和ParseConfig程序 b. 执行make release, 编译生成的.o文件存放于RELEASE目录,编译参数包含-Os -DNDEBUG, 链接完成之后对libParseConfig.so和ParseConfig自动进行strip c. 执行make debug, 编译生成的.o文件存放于DEBUG目录,,编译参数包含-g,链接完成之后libParseConfig.so和ParseConfi不strip d. 执行make static_release, 生成的ParseConfig自动strip,并且不依赖libParseConfig.so e. 执行make debug_release, ParseConfi不strip,并且不依赖libParseConfig.so f. 执行make clean, 能够清除所有的二进制文件和中间文件
时间: 2024-02-23 11:58:54 浏览: 22
好的,我明白了。下面是Makefile的编写:
```makefile
CC = gcc
CFLAGS = -Wall
LDFLAGS = -L.
LDLIBS = -lParseConfig
SRC_DIR = ./src
RELEASE_DIR = ./RELEASE
DEBUG_DIR = ./DEBUG
SRCS = $(wildcard $(SRC_DIR)/*.c)
OBJS = $(addprefix $(RELEASE_DIR)/, $(notdir $(SRCS:.c=.o)))
DEBUG_OBJS = $(addprefix $(DEBUG_DIR)/, $(notdir $(SRCS:.c=.o)))
.PHONY: all release debug static_release debug_release clean
all: release
release: CFLAGS += -Os -DNDEBUG
release: LDFLAGS += -Wl,-rpath=.
release: libParseConfig.a libParseConfig.so ParseConfig
strip -s libParseConfig.so ParseConfig
debug: CFLAGS += -g
debug: LDFLAGS += -Wl,-rpath=.
debug: libParseConfig.so ParseConfig
mv libParseConfig.so $(DEBUG_DIR)/libParseConfig.so
mv ParseConfig $(DEBUG_DIR)/ParseConfig
static_release: CFLAGS += -Os -DNDEBUG -static
static_release: ParseConfig
strip -s ParseConfig
debug_release: CFLAGS += -g -static
debug_release: ParseConfig
mv ParseConfig $(DEBUG_DIR)/ParseConfig
libParseConfig.a: $(OBJS)
ar cr $@ $^
libParseConfig.so: $(OBJS)
$(CC) $(LDFLAGS) -shared -o $@ $^
$(RELEASE_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
$(DEBUG_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
ParseConfig: $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
clean:
rm -rf $(RELEASE_DIR)/*.o $(DEBUG_DIR)/*.o libParseConfig.a libParseConfig.so ParseConfig
```
使用方法:
- 执行 `make`:编译并链接生成 `libParseConfig.a`、`libParseConfig.so` 和 `ParseConfig`。
- 执行 `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`:清除所有的二进制文件和中间文件。