Makefile致命错误:无法创建obj/calc.o

Eig*_*Poe 4 c makefile

我正在尝试为大学项目制作一个简单计算器的makefile.我需要它完成,我在网上搜索教程,我最终找到了这段代码:

IDIR =include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR=lib
SDIR=src

LIBS=-lm

_DEPS = calc.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = calc.o libcalc.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))


$(ODIR)/%.o: $(SDIR)/%.c $(DEPS)
    $(CC) -c -o $@ $< $(CFLAGS)

calc: $(OBJ)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 
Run Code Online (Sandbox Code Playgroud)

make命令的输出是

gcc -c -o obj/calc.o calc.c -I../include
Assembler messages:
Fatal error: can't create obj/calc.o: No such file or directory
make: *** [obj/calc.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我的教授没有给我们带头或指示,所以我真的迷失了.

我的项目是在三个文件夹分为:lib,srcinclude.src包含项目的源,名为calc.c,include包含名为的头calc.h,并lib包含名为的库libcalc.c.

编辑:我想出了这个错误,而且是没有创建obj下面的目录src.但是,它仍然无法正常工作.新的错误消息是:

make: *** No rule to make target `obj/libcalc.o', needed by `calc'.  Stop.
Run Code Online (Sandbox Code Playgroud)

编辑2:我刚刚将libcalc.c从lib移动到obj,它工作正常.不理想,但它做我需要的.

ilb*_*kyr 7

obj目录不存在,因此gcc无法在那里写入输出文件.

您可以从Makefile自动创建它,但根据您想要做的事情,mkdir obj您可能只需要一个简单的东西.

但是,看起来您正在从src目录运行Makefile .您可能希望从项目的根目录运行它并指定src/需要的位置.你想为它添加一个SDIR变量(或类似的); 确保去除../LDIR,IDIR并且ODIR在这种情况下.

例如,您当前使用的位置%.c,请$(SDIR)/%.c改为使用,并适当移动Makefile.