【发布时间】:2021-04-09 10:31:26
【问题描述】:
我希望我的 makefile 编译两个源,osmprun.c 和 echoall.c。 目前它只是在编译 osmprun.c,这会产生错误。
我束手无策,我根本没有使用 makefile 的经验,我只是不明白我做错了什么。
我的makefile是:
CC=gcc
CFLAGS= -Wall -Wconversion -g
LIBS=-lm -lpthread
DEPS=
BUILD_DIR := build
SRCS := osmprun.c echoall.c
OBJS := $(addprefix $(BUILD_DIR)/,$(patsubst %.c,%.o,$(SRCS)))
$(BUILD_DIR)/%.o: %.c $(DEPS)
mkdir -p $(BUILD_DIR)
$(CC) -c $(CFLAGS) $< -o $@
echoall: $(OBJS)
mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) $< $(LIBS) -o $@
osmprun: $(OBJS)
mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) $< $(LIBS) -o $@
.PHONY: clean
clean:
rm -f $(BUILD_DIR)/*.o *~ core
test:
./osmprun
有人可以帮我找出我的错误并解释问题所在吗?
编辑:
我现在已经将应该编译这两个文件的部分更改为:
echoall: echoall.c
$(CC) $(CFLAGS) $^ $(LIBS) -o $@
osmprun: osmprun.c
$(CC) $(CFLAGS) $^ $(LIBS) -o $@
但它仍然只是编译 echoall,而不是 osmprun
【问题讨论】:
-
不要在多个食谱中使用
mkdir。在不同的规则中创建目录并添加依赖项。