У меня есть проект C ++ с этой файловой структурой:
включаемые файлы:
src файлы:
Чтобы скомпилировать и запустить, я пытаюсь создать простой Makefile.Пройдя несколько уроков, вот что я получил:
vpath %.hpp include
vpath %.cpp src
agenda: agenda.cpp User.o Date.o Meeting.o Storage.o AgendaService.o AgendaUI.o
g++ agenda.cpp User.o Date.o Meeting.o Storage.o AgendaService.o AgendaUI.o -o agenda
User.o:User.hpp User.cpp
g++ -c -std=c++11 User.cpp
Date.o:Date.hpp Date.cpp
g++ -c -std=c++11 Date.cpp
Meeting.o:Meeting.hpp Meeting.cpp
g++ -c -std=c++11 Meeting.cpp
Storage.o:Storage.hpp Storage.cpp
g++ -c -std=c++11 Storage.cpp
AgendaService.o:AgendaService.hpp AgendaService.cpp
g++ -c -std=c++11 AgendaService.cpp
AgendaUI.o:AgendaUI.hpp AgendaUI.cpp
g++ -c -std=c++11 AgendaUI.cpp
clean:
rm User.o Date.o Meeting.o Storage.o AgendaService.o AgendaUI.o
И, кстати, основная функция здесь - это файл agenda.cpp
.Таким образом, выполняя команду make
, я получаю эту ошибку :
make: *** No rule to make target 'agenda.cpp', needed by 'agenda'. Stop.
Я думаю, что он не может найти путь к повестке дня.сделать правило.Во всяком случае, не уверен, надеюсь, кто-то может объяснить.
EDIT.0:
Я отредактировал make-файл, добавив vpath, но все равно получаю ошибку (new) :
g++ -c -std=c++11 User.cpp
g++: error: User.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.
make: *** [makefile:9: User.o] Error 1
Похоже, в этот раз он нашел agenda.cpp
и User.hpp
, но не может найти User.cpp
.Действительно был бы признателен за любую подсказку, работал над этим в течение длительного времени.
EDIT.1:
#VPATH = src:include
#CPPFLAGS = -I include
#vpath %.hpp include
#vpath %.cpp src
bin/agenda: build/User.o build/Date.o build/Meeting.o build/Storage.o build/AgendaService.o build/AgendaUI.o
@mkdir -p bin
g++ -std=c++11 -w -I./include $^ -o $@
build/%.o: src/%.cpp
@mkdir -p build
g++ -std=c++11 -w -I./include -c -o $@ $<
clean:
@rm -rf build
@rm -rf bin
Потратив некоторое время на мой Makefile, это окончательный ответ, он прекрасно компилирует все файлы * .cpp, сохраняет objфайл в папке сборки, нет проблем, кроме повестки дня. файл (основной файл), я не получил свой исполняемый файл.Но получил эту ошибку:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [makefile:8: bin/agenda] Error 1
Как я могу это исправить?