Forum Linux.pl

Programowanie => C/C++ => Wątek zaczęty przez: alien1983 w 2017-11-06, 17:07:14

Tytuł: Make generuje taki błąd ***missing separator
Wiadomość wysłana przez: alien1983 w 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.
Tytuł: Odp: Make generuje taki błąd ***missing separator
Wiadomość wysłana przez: vanhelzing w 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.
Tytuł: Odp: Make generuje taki błąd ***missing separator
Wiadomość wysłana przez: Paweł Kraszewski w 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 (https://www.gnu.org/software/make/manual/make.html), 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ć.
Tytuł: Odp: Make generuje taki błąd ***missing separator
Wiadomość wysłana przez: alien1983 w 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?
Tytuł: Odp: Make generuje taki błąd ***missing separator
Wiadomość wysłana przez: alien1983 w 2017-11-11, 08:40:57
Ok działa :)))