0

Ситуация: есть программа, которая работает так, как и было задумано, если её скомпилировать вручную. Теперь я добавляю универсальный 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

В чём ошибка?

3
  • B и G на клавиатуре рядом. Вот и появилось новое слово OGJECTS
    – KoVadim
    22 июл 2014 в 16:50
  • Пофиксил ещё ошибку TAGRET - TARGET, но результат тот же. Видимо, почему-то он сначала пытается скомпилить главную функцию, а не класс, который в ней используется.
    – Montreal
    22 июл 2014 в 17:12
  • Убрал пробелы между скобками и заработало...
    – Montreal
    22 июл 2014 в 17:36

1 ответ 1

1

В скрипте было несколько орфографических ошибок и недопустимых пробелов между скобками.

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.