Programowanie > C/C++
Make generuje taki błąd ***missing separator
(1/1)
alien1983:
Poniższy kod jest błędny czy to wina programu make?
--- Kod: ---
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)/*~
--- Koniec kodu ---
--- Cytuj ---root@raspberrypi:/home/pi# make
makefile:18: *** missing separator (did you mean TAB instead of 8 spaces?).
Stop.
--- Koniec cytatu ---
Ogólnie potrzebuje uniwersalny plik makefile , który skompiluje mi wszystkie pliki znajdujace sie w katalogu i w prosty sposób doda mi biblioteki.
vanhelzing:
--- Kod: ---
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)/*~
--- Koniec kodu ---
Zacznij formatować plik Makefile. Linia polecenia powinna zaczynać się od znaku tabulacji.
Paweł Kraszewski:
--- Cytat: vanhelzing w 2017-11-06, 18:30:46 ---Zacznij formatować plik Makefile. Linia polecenia powinna zaczynać się od znaku tabulacji.
--- Koniec cytatu ---
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ć.
alien1983:
Dzieki wielkie za pomoc,
Znalazłem jeszcze bardziej zautomatyzowany makefile i mam pewien problem, jak go przestawić z gcc na g++ . ?
--- Kod: ---
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
--- Koniec kodu ---
Prawdopodobnie trzeba coś zrobić z linią LINK.cc ....... LINK.++ ???
Moje kolejne pytanie to:
Jak podpiąc do jednego pliku makefile inny plik makefile?
alien1983:
Ok działa :)))
Nawigacja
Idź do wersji pełnej