Nowe posty

Autor Wątek: Make generuje taki błąd ***missing separator  (Przeczytany 794 razy)

Offline alien1983

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 3
    • Zobacz profil
Make generuje taki błąd ***missing separator
« dnia: 2017-11-06, 17:07:14 »
Poniższy kod jest błędny czy to wina programu make?
IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

LIBS=-lm

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

_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

$(ODIR)/%.o: %.c $(DEPS)

$(CC) -c -o $@ $< $(CFLAGS)


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

.PHONY: clean

clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~

Cytuj
root@raspberrypi:/home/pi# make                                             
makefile:18: *** missing separator (did you mean TAB instead of 8 spaces?).
 Stop.

Ogólnie potrzebuje uniwersalny plik makefile , który skompiluje mi wszystkie pliki znajdujace sie w katalogu i w prosty sposób doda mi biblioteki.
« Ostatnia zmiana: 2017-11-06, 17:13:59 wysłana przez alien1983 »

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 310
    • Zobacz profil
Odp: Make generuje taki błąd ***missing separator
« Odpowiedź #1 dnia: 2017-11-06, 18:30:46 »
IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

LIBS=-lm

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

_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

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

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

.PHONY: clean

clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~

Zacznij formatować plik Makefile. Linia polecenia powinna zaczynać się od znaku tabulacji.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2286
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
    • Linuxpedia.PL
Odp: Make generuje taki błąd ***missing separator
« Odpowiedź #2 dnia: 2017-11-06, 19:20:52 »
Zacznij formatować plik Makefile. Linia polecenia powinna zaczynać się od znaku tabulacji.

Kolega Vanhelzing może mało dobitnie powiedział: w make reguły muszą zaczynać się od tabulatora, nie mogą od spacji. I jest to w początkowych akapitach każdego manuala do make'a...

Manual GNU-Make, punkt 2.1 (wytłuszczenie jest częścią dokumentacji): Please note: you need to put a tab character at the beginning of every recipe line! . Co prawda później jest o zmiennej .RECIPEPREFIX, ale niech cię ręka stallmanowa broni tego dotykać.
Paweł Kraszewski
~Gentoo/FreeBSD/OpenBSD/Specjalizowane customy
Jeżeli uważasz, że warto: 1AfKbLX6nZSqv5DNhXMNLivc9fXwaHMd4Z

Offline alien1983

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 3
    • Zobacz profil
Odp: Make generuje taki błąd ***missing separator
« Odpowiedź #3 dnia: 2017-11-09, 17:56:31 »
Dzieki wielkie za pomoc,

Znalazłem jeszcze bardziej zautomatyzowany makefile i mam pewien problem, jak go przestawić z gcc na g++ . ?
program_NAME := myprogram
program_C_SRCS := $(wildcard *.c)
program_CXX_SRCS := $(wildcard *.cpp)
program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.o}
program_OBJS := $(program_C_OBJS) $(program_CXX_OBJS)
program_INCLUDE_DIRS :=
program_LIBRARY_DIRS :=
program_LIBRARIES :=

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))

.PHONY: all clean distclean

all: $(program_NAME)

$(program_NAME): $(program_OBJS)
$(LINK.cc) $(program_OBJS) -o $(program_NAME)

clean:
@- $(RM) $(program_NAME)
@- $(RM) $(program_OBJS)

distclean: clean

 

Prawdopodobnie trzeba coś zrobić z linią LINK.cc ....... LINK.++ ???


Moje kolejne pytanie to:
         Jak podpiąc do jednego pliku makefile inny plik makefile?
« Ostatnia zmiana: 2017-11-09, 19:25:24 wysłana przez alien1983 »

Offline alien1983

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 3
    • Zobacz profil
Odp: Make generuje taki błąd ***missing separator
« Odpowiedź #4 dnia: 2017-11-11, 08:40:57 »
Ok działa :)))
« Ostatnia zmiana: 2017-11-11, 08:53:31 wysłana przez alien1983 »