【发布时间】:2020-04-15 02:44:01
【问题描述】:
我的 Makefile 编译文件列表,但我想根据目标附加新文件。 真正的makefile可以在这里找到
https://github.com/fangq/mmc/blob/v1.7.9/src/Makefile#L4 https://github.com/fangq/mmc/blob/v1.7.9/commons/Makefile_common.mk#L192-L194
但为了说明问题,我有以下简化的 sn-p
OBJDIR=build
OBJSUFFIX=.o
BINARY=proj
FILES:=file1 file2
OBJS:= $(addprefix $(OBJDIR)/, $(FILES))
OBJS:= $(addsuffix $(OBJSUFFIX), $(OBJS))
opt: FILES+=file3 # append a file for a target
opt: OBJS:= $(addprefix $(OBJDIR)/, $(FILES))
opt: OBJS:= $(addsuffix $(OBJSUFFIX), $(OBJS))
## Link ##
all opt: $(BINARY)
## Compile .c files ##
$(OBJDIR)/%$(OBJSUFFIX): %.c
@$(ECHO) Building $@
$(CC) $(CCFLAGS) $(USERCCFLAGS) -I$(INCLUDEDIR) -o $@ $<
$(BINARY): $(OBJS)
@$(ECHO) Building $@
# link file1.o file2.o when make
# link file1.o file2.o file3.o when make opt
我的目标是在输入make 时,我想编译和链接file1.o/file2.o,但是在输入“make opt”时,我希望makefile 编译file1.o/file2.o 和file3.o。
但我上面的 sn -p 无法做到这一点。它只能更改OBJS,但它会在编译中跳过file3。
有解决办法吗?
【问题讨论】:
-
首先想到的是,在没有指定 opt 的情况下删除 file3.o,然后你的链接步骤将大大简化为 glob,因为在编译步骤中不会生成 file3.o .