Я получил эту структуру каталогов:Makefile: Нет такого файла или каталога
- src
- /GUILayer
- /PhysicLayer
- /LogicLayer
- /Utilities
- main.cpp
- makefile
- makefile.inc
И это мой текущий makefile
внутри src
:
include makefile.inc
DIRS = PhysicLayer LogicLayer GUILayer Utilities
OBJLIBS = PhysicLayer.a LogicLayer.a GUILayer.a Utilities.a
EXTERNOBJ = $(foreach path, $(DIRS), $(wildcard $(path)/*.o))
TARGETS = main.cpp
EXE = main
all : $(EXE)
%.a :
-for d in $(DIRS); do (cd $$d; $(MAKE)); done
ar cr [email protected] $^
main: $(OBJLIBS)
$(ECHO) $(CC) $(CFLAGS) $(EXTERNOBJ) $(OBJLIBS) -o [email protected] $(TARGETS)
$(CC) $(CFLAGS) $(EXTERNOBJ) $(OBJLIBS) -o [email protected] $(TARGETS)
clean :
-$(RM) -f ./main
find . -name "*.o" -type f -print | xargs /bin/rm -f
find . -name "*.a" -type f -print | xargs /bin/rm -f
файлы внутри папки генерировать. o просто отлично, но main
не генерируется вообще. Это выход из терминала:
g++ -Wall -pedantic -pedantic-errors -g -ggdb PhysicLayer.a LogicLayer.a GUILayer.a Utilities.a -o main main.cpp
/tmp/ccA3VJed.o: In function `main':
/home/user/Desktop/project/src/main.cpp:14: undefined reference to `Indexador::Indexador()'
/home/user/Desktop/project/src/main.cpp:19: undefined reference to `Indexador::indexar(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/home/user/Desktop/project/src/main.cpp:38: undefined reference to `Indexador::~Indexador()'
/home/user/Desktop/project/src/main.cpp:38: undefined reference to `Indexador::~Indexador()'
collect2: ld returned 1 exit status
make: *** [main] Error 1
Вы должны предоставить действующую команду компиляции. Ваш make-файл повторяет что-то еще, что просто путает вещи. У команды, которую вы печатаете, на самом деле не будет файлов для компиляции. – juanchopanza
Вы видите, что это 'g ++ -Wall -pedantic -pedantic-errors -g -ggdb -o Bloque.o' ничего не делает. Вам нужны некоторые входные файлы, и, по-видимому, вам нужно добавить '-c' где-то, чтобы скомпилировать объектный файл вместо исполняемого файла. Он должен выглядеть примерно так: g ++ -c -Wall -pedantic -pedantic-errors -g -ggdb Bloque.cpp -o Bloque.o' – juanchopanza
@juanchopanza, можете ли вы прочитать исходное сообщение еще раз? Я обновил его. Спасибо! –