簡體   English   中英

Makefile與obj文件不匹配

[英]Makefile doesn't match obj file

我必須在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。

有人知道為什么嗎? 謝謝。

一個錯誤是/includes是不存在的絕對路徑(此處所有其他路徑都相同)。 您需要的是相對路徑: includes或(如果您喜歡鍵入) ./includes

另一個錯誤是您在依賴項和規則中省略了路徑,從而使make永遠找不到您的文件。 例如:

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

確實應該是:

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

所有路徑都應相對於當前目錄,即您的makefile所在的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM