Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Make generuje taki błąd ***missing separator  (Przeczytany 3576 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: 3049
  • 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 »