编写一个MakeFile,放入练习2代码目录,完成以下要求: a. 执行make,能自动完成编译和连接过程,生成libParseConfig.a, libParseConfig.so和ParseConfig程序 b. 执行make release, 编译生成的.o文件存放于RELEASE目录,编译参数包含-Os -DNDEBUG, 链接完成之后对libParseConfig.so和ParseConfig自动进行strip c. 执行make debug, 编译生成的.o文件存放于DEBUG目录,,编译参数
时间: 2024-02-21 15:56:47 浏览: 65
Makefile自动搜所目录及子目录下的的所有文件、自动生成编译目录
以下是一个可能的Makefile示例,可以根据实际情况进行修改:
```
# Makefile for ParseConfig
CC = gcc
CFLAGS = -Wall -Wextra -Werror -g
LDFLAGS = -L. -lParseConfig
RELEASE_CFLAGS = -Os -DNDEBUG
RELEASE_LDFLAGS = $(LDFLAGS) -s
DEBUG_CFLAGS = -DDEBUG
SRCDIR = .
RELEASEDIR = RELEASE
DEBUGDIR = DEBUG
SOURCES = $(wildcard $(SRCDIR)/*.c)
HEADERS = $(wildcard $(SRCDIR)/*.h)
OBJECTS = $(patsubst $(SRCDIR)/%.c,$(RELEASEDIR)/%.o,$(SOURCES))
DEBUG_OBJECTS = $(patsubst $(SRCDIR)/%.c,$(DEBUGDIR)/%.o,$(SOURCES))
.PHONY: all release debug clean
all: libParseConfig.a libParseConfig.so ParseConfig
release: CFLAGS += $(RELEASE_CFLAGS)
release: LDFLAGS += $(RELEASE_LDFLAGS)
release: $(OBJECTS) libParseConfig.a libParseConfig.so ParseConfig
strip libParseConfig.so ParseConfig
debug: CFLAGS += $(DEBUG_CFLAGS)
debug: $(DEBUG_OBJECTS) libParseConfig.a libParseConfig.so ParseConfig
$(RELEASEDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) | $(RELEASEDIR)
$(CC) $(CFLAGS) -c $< -o $@
$(DEBUGDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) | $(DEBUGDIR)
$(CC) $(CFLAGS) -c $< -o $@
libParseConfig.a: $(OBJECTS)
ar rcs $@ $^
libParseConfig.so: $(OBJECTS)
$(CC) $(CFLAGS) -shared -o $@ $^
ParseConfig: $(SRCDIR)/ParseConfig.c $(HEADERS) libParseConfig.a
$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
$(RELEASEDIR) $(DEBUGDIR):
mkdir -p $@
clean:
rm -rf $(RELEASEDIR) $(DEBUGDIR) libParseConfig.a libParseConfig.so ParseConfig
```
使用方法:
- 在练习2代码目录下创建一个名为Makefile的文件,并将上述内容复制进去。
- 执行命令`make`,即可编译并链接生成libParseConfig.a,libParseConfig.so和ParseConfig程序。
- 执行命令`make release`,则会以优化参数编译生成的.o文件存放于RELEASE目录,并对libParseConfig.so和ParseConfig进行strip处理。
- 执行命令`make debug`,则会以调试参数编译生成的.o文件存放于DEBUG目录。
- 执行命令`make clean`,则会清除所有生成的文件。
阅读全文