Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

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

alien1983

  • Gość
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: 314
    • 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: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
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
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

alien1983

  • Gość
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 »

alien1983

  • Gość
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 »