【发布时间】:2021-01-01 19:30:23
【问题描述】:
我正在尝试使用带有 makefile 的 GCC (linux) 来编译我的项目。 我收到以下错误
"No rule to make target 'output/src/main.o', needed by 'test'. Stop."
这是生成文件:
COMPILE_PREX ?=
CC = $(COMPILE_PREX)gcc
SOURCE = $(wildcard src/*.c)
OBJS = $(addprefix ./output/, $(patsubst %.c, %.o, $(SOURCE)))
INCLUDES = -I ./src
CFLAGS += -O2 -Wall -g
LDFLAGS += -lpthread
TARGET = test
$(TARGET): $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) -o $(TARGET)
%.o: %.c
@mkdir -p ./output
$(CC) $(CFLAGS) $(INCLUDES) -o $(addprefix ./output/, $@) -c $<
clean:
rm -rf ./output
【问题讨论】:
-
你在撒谎。
%.o: %.c规则不会创建$@(你承诺的),而是./output/$@(这是谎言)。 -
如果要将
*.o输出到./output/怎么办? -
将规则更改为
output/%.o: src/%.c是否有效?这也需要$(CC) .... -o $@ -c $<。 -
我正在尝试,但它不起作用。
-
好的,Stackoverflow 的下一步是投票并接受对您有帮助的答案。