Ситуация: есть программа, которая работает так, как и было задумано, если её скомпилировать вручную. Теперь я добавляю универсальный makefile чтобы автоматизировать процесс сборки. Если верить этому руководству, то всё должно собираться простой командой make, если makefile лежит в папке с исходниками (или я что-то неправильно понял).
#makefile
TARGET = $( shell basename `pwd` )
SOURCES = $( wildcard *.cpp )
OBJECTS = $( SOURCES:%.cpp=%.o )
all: $(TAGRET)
$(OBJECTS): $(SOURCES)
$(TAGRET): $(OBJECTS)
$(CXX) -o $(TAGRET) $(LDFLAGS) $(OGJECTS) $(LOADLIBES) $(LDLIBS)
clean:
$(RM) $(OBJECTS) $(TAGRET)
.PHONY: all clean
Но команда make
даёт вот такой результат:
make: Nothing to be done for `all'.
а команда make Greetings
вот такой:
g++ Greetings.cpp -o Greetings
/tmp/cclc1PYt.o: In function `main':
Greetings.cpp:(.text+0x1d): undefined reference to `MyGreetingsPrinter::MyGreetingsPrinter()'
Greetings.cpp:(.text+0x29): undefined reference to `MyGreetingsPrinter::PrintGreetings()'
collect2: ld returned 1 exit status
make: *** [Greetings] Error 1
В чём ошибка?