Makefile与obj文件

时间:2017-05-12 15:12:31

标签: c gcc makefile

我必须在C项目中工作,我对make有问题。文件结构是:

 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。

任何人都知道为什么?谢谢你。

1 个答案:

答案 0 :(得分:0)

一个错误是/includes是一个不存在的绝对路径(这同样适用于所有其他路径)。您需要的是相对路径:includes或者,如果您愿意输入,请./includes

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

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

应该是:

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

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