帮我检查下这个makefile的错误,它没有成功编译一个静态库:CC=gcc AR=ar CFLAGS=-I./include ARFLAGS=rcs DEPS = api.h OBJ = api.o LIBS= libcommon_a libcommon_b EXTRACTED_OBJ= $(foreach lib, $(LIBS), $(wildcard $(lib)/*.o)) %.o: %.c $(DEPS) $(CC) -C -o $@ $< $(CFLAGS) $(LIBS): $(AR) -x ./lib_a/libcommon_a.a $(AR) -x ./lib_b/libcommon_b.a libmyapi.a: $(OBJ) $(LIBS) $(AR) $(ARFLAGS) $@ $(OBJ) $(EXTRACTED_OBJ) .PHONY: clean clean: rm -f *.o *~ core libmyapi.a
时间: 2024-02-17 08:00:07 浏览: 91
makefile常用模板
这个Makefile有一些小问题,你可以根据以下的Makefile进行修改,注释中有相应的说明:
```
CC = gcc
AR = ar
CFLAGS = -I./include
ARFLAGS = rcs
DEPS = api.h
OBJ = api.o
LIBS = libcommon_a libcommon_b
EXTRACTED_OBJ = $(foreach lib, $(LIBS), $(wildcard $(lib)/*.o))
# 增加了一个通配符规则,用于编译所有的.c文件
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
$(LIBS):
$(MAKE) -C $@
# 修改了目标libmyapi.a的依赖关系和命令
libmyapi.a: $(OBJ) $(LIBS)
$(AR) $(ARFLAGS) $@ $^ $(EXTRACTED_OBJ)
# 增加了一个伪目标clean
.PHONY: clean
clean:
rm -f *.o *~ core libmyapi.a
# 增加了对每个子目录的编译规则,用于编译子目录中的源文件
$(LIBS):
$(MAKE) -C $@
```
需要注意的是,这个Makefile中假定每个子目录(libcommon_a和libcommon_b)都有一个Makefile,并且可以通过make命令进行编译。如果你的子目录中没有Makefile,需要根据需要进行修改。
阅读全文