【问题标题】:Makefile doesn't match obj fileMakefile 与 obj 文件不匹配
【发布时间】:2017-05-12 15:12:30
【问题描述】:

我必须在一个 C 项目中工作,但我的制作有问题。文件结构为:

 dir
 --/bin
 --/src
     all the sources files (.c)
 --/includes
     all the includes (.h)
 makefile

makefile 是:

CC   = gcc
RES  = 
_OBJ  = paciente.o utils.o obrasocial.o pacienteobrasocial.o orm.o 
profespecialidad.o profesional.o especialidad.o turnos.o $(RES)
LINKOBJ  = main.o utils.o $(RES)

MAINOBJ = main.o
MAINSRC= main.c

LIBS =  -L"/usr/lib"

IDIR =/includes

INCS = -I$(IDIR)
BIN  = tpfinalc

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

ODIR=/bin

CFLAGS = $(INCS) $(LIBS) -lpq
RM = rm -f

OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

SDIR = /src
_SRC =  especialidad.c obrasocial.c orm.c paciente.c 
pacienteobrasocial.c profesional.c profespecialidad.c turnos.c utils.c
SRC = $(patsubst %,$(SDIR)/%,$(_SRC))

VPATH = src

.PHONY: all all-before all-after clean clean-custom

all: all-before tpfinalc all-after clean

$(BIN): $(OBJ)
    $(CC) $(LINKOBJ) -o tpfinalc $(CFLAGS)

$(ODIR)/$(MAINOBJ): MAINSRC $(DEPS)
    $(CC) -c MAINSRC -o $(ODIR)/$(MAINOBJ) $(CFLAGS)

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

我想这应该是正确的,但是当我制作我的 c 文件时,控制台显示没有任何规则可以构建 bin/paciente。

有人知道为什么吗?谢谢你。

【问题讨论】:

    标签: c gcc makefile


    【解决方案1】:

    一个错误是/includes 是一个不存在的绝对路径(同样适用于此处的所有其他路径)。你需要的是一个相对路径:includes,或者,如果你喜欢打字,./includes

    另一个错误是您在依赖项和规则中省略了路径,因此 make 永远找不到您的文件。例如:

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

    应该是:

    bin/%.o: src/%.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)
    

    所有路径都应相对于当前目录,即您的makefile 所在的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2020-02-03
      相关资源
      最近更新 更多