2016-08-14 4 views
0

Мне бы хотелось перенести мою среду C++ с Visual Studio на Windows на создание простого программного обеспечения на MacOS или Ubuntu.Что не хватает: make: *** Нет правила для создания цели

Мой тестовый проект для этого (я маленькая змея игра) содержит следующую структуру

Snake 
|- bin 
|- data 
|- docs 
|- lib 
|- inc 
    |- application 
     |- app_main.h 
     |- app_game_state.h 
     |- app_load_map_state.h 
     |- app_main_menu_state.h 
     |- app_play_state.h 
     |- app_shutdown_state.h 
     |- app_startup_state.h 
     |- app_state.h 
     |- app_unload_map_state.h 
    |- core 
    |- graphics 
    |- gui 
    |- logic 
    |- world 
|- intern 
    |- build 
     |- obj 
    |- tests 
    |- src 
     |- application 
     |- Makefile 
     |- main.cpp 
     |- app_main.cpp 
     |- app_game_state.cpp 
     |- app_load_map_state.cpp 
     |- app_main_menu_state.cpp 
     |- app_play_state.cpp 
     |- app_shutdown_state.cpp 
     |- app_startup_state.cpp 
     |- app_state.cpp 
     |- app_unload_map_state.cpp 
     |- core 
     |- graphics 
     |- gui 
     |- logic 
     |- world 

Makefile структурирована следующим образом:

IDIR = ../../../inc 
CC = g++ 
CFLAGS = -I$(IDIR) 

ODIR = ../../build/obj 
LDIR = ../../../lib 

VPATH = ../core:../graphics/:../gui/:../logic/:../world/ 

_DEPS = app_game_state.h app_load_map_state.h app_main.h app_main_menu_state.h app_play_state.h app_shutdown_state.h app_startup_state.h app_state.h app_unload_map_state.h 
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

_OBJ = main.o app_game_state.o app_load_map_state.o app_main.o app_main_menu_state.o app_play_state.o app_shutdown_state.o app_startup_state.o app_state.o app_unload_map_state.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 

$(ODIR)/%.o: %.cpp $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

main: $(OBJ) 
    g++ -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

clean: 
    rm -f $(ODIR)/*.o *~core $(INCDIR)/*~ 

Моя цель состояла в том, чтобы порт, что я имею узнал от this excellent beginner tutorial on Makefiles моей собственной архитектуре. Команда tutorials make работает без проблем на моей машине. Так что, наверное, я что-то пропустил.

Поскольку я новичок в Makefiles, мне трудно понять понятия. Хотя я думал, чтобы понять основы, команда сделает возвращает make: *** No rule to make target '../../build/obj/main.o', needed by 'main'. Stop. ошибку, когда я бегу сделать из intern/src/application

Чтобы решить эту проблему, я пытался применить решение от gcc makefile error: "No rule to make target ..." к моему коду - но без успеха.

Где ошибка в моем Makefile и что я не понял?

Edit: Вот вывод делает с флагом -d с поддержкой (пришлось удалить часть кода с самого начала из-за stackoverflows ограничения символов в сообщении)

GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for i386-apple-darwin11.3.0 
Reading makefiles... 
Reading makefile `Makefile'... 
... 
    Looking for a rule with intermediate file `Makefile.S'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `Makefile.S'. 
    Trying implicit prerequisite `Makefile.S,v'. 
    Trying pattern rule with stem `Makefile.S'. 
    Trying implicit prerequisite `RCS/Makefile.S,v'. 
    Trying pattern rule with stem `Makefile.S'. 
    Trying implicit prerequisite `RCS/Makefile.S'. 
    Trying pattern rule with stem `Makefile.S'. 
    Trying implicit prerequisite `s.Makefile.S'. 
    Trying pattern rule with stem `Makefile.S'. 
    Trying implicit prerequisite `SCCS/s.Makefile.S'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.S'. 
    Trying pattern rule with stem `Makefile'. 
    Trying implicit prerequisite `Makefile.mod'. 
    Looking for a rule with intermediate file `Makefile.mod'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `Makefile.mod'. 
    Trying implicit prerequisite `Makefile.mod,v'. 
    Trying pattern rule with stem `Makefile.mod'. 
    Trying implicit prerequisite `RCS/Makefile.mod,v'. 
    Trying pattern rule with stem `Makefile.mod'. 
    Trying implicit prerequisite `RCS/Makefile.mod'. 
    Trying pattern rule with stem `Makefile.mod'. 
    Trying implicit prerequisite `s.Makefile.mod'. 
    Trying pattern rule with stem `Makefile.mod'. 
    Trying implicit prerequisite `SCCS/s.Makefile.mod'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.c'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.cc'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.C'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.cpp'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.p'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.f'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.F'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.m'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.r'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.s'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.S'. 
    Trying pattern rule with stem `Makefile'. 
    Rejecting impossible implicit prerequisite `Makefile.mod'. 
    Trying pattern rule with stem `Makefile'. 
    Trying implicit prerequisite `Makefile.sh'. 
    Looking for a rule with intermediate file `Makefile.sh'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `Makefile.sh'. 
    Trying implicit prerequisite `Makefile.sh,v'. 
    Trying pattern rule with stem `Makefile.sh'. 
    Trying implicit prerequisite `RCS/Makefile.sh,v'. 
    Trying pattern rule with stem `Makefile.sh'. 
    Trying implicit prerequisite `RCS/Makefile.sh'. 
    Trying pattern rule with stem `Makefile.sh'. 
    Trying implicit prerequisite `s.Makefile.sh'. 
    Trying pattern rule with stem `Makefile.sh'. 
    Trying implicit prerequisite `SCCS/s.Makefile.sh'. 
    No implicit rule found for `Makefile'. 
    Finished prerequisites of target file `Makefile'. 
No need to remake target `Makefile'. 
Updating goal targets.... 
Considering target file `main'. 
File `main' does not exist. 
    Considering target file `../../build/obj/main.o'. 
    File `../../build/obj/main.o' does not exist. 
    Looking for an implicit rule for `../../build/obj/main.o'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `main.cpp'. 
    Trying rule prerequisite `../../../inc/app_game_state.h'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.c'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.cc'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.C'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.cpp'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.p'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.f'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.F'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.m'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.r'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.s'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.S'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.mod'. 
    Trying pattern rule with stem `main.o'. 
    Trying implicit prerequisite `../../build/obj/main.o,v'. 
    Trying pattern rule with stem `main.o'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.o,v'. 
    Trying pattern rule with stem `main.o'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.o'. 
    Trying pattern rule with stem `main.o'. 
    Trying implicit prerequisite `../../build/obj/s.main.o'. 
    Trying pattern rule with stem `main.o'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.o'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `main.cpp'. 
    Trying rule prerequisite `../../../inc/app_game_state.h'. 
    Looking for a rule with intermediate file `../../../inc/app_game_state.h'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `app_game_state.h'. 
    Trying implicit prerequisite `../../../inc/app_game_state.h,v'. 
    Trying pattern rule with stem `app_game_state.h'. 
    Trying implicit prerequisite `../../../inc/RCS/app_game_state.h,v'. 
    Trying pattern rule with stem `app_game_state.h'. 
    Trying implicit prerequisite `../../../inc/RCS/app_game_state.h'. 
    Trying pattern rule with stem `app_game_state.h'. 
    Trying implicit prerequisite `../../../inc/s.app_game_state.h'. 
    Trying pattern rule with stem `app_game_state.h'. 
    Trying implicit prerequisite `../../../inc/SCCS/s.app_game_state.h'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.c'. 
    Looking for a rule with intermediate file `../../build/obj/main.c'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.y'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.l'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.w'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.w'. 
    Trying pattern rule with stem `main.c'. 
    Trying implicit prerequisite `../../build/obj/main.c,v'. 
    Trying pattern rule with stem `main.c'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.c,v'. 
    Trying pattern rule with stem `main.c'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.c'. 
    Trying pattern rule with stem `main.c'. 
    Trying implicit prerequisite `../../build/obj/s.main.c'. 
    Trying pattern rule with stem `main.c'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.c'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.y'. 
    Looking for a rule with intermediate file `../../build/obj/main.y'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.y'. 
    Trying implicit prerequisite `../../build/obj/main.y,v'. 
    Trying pattern rule with stem `main.y'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.y,v'. 
    Trying pattern rule with stem `main.y'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.y'. 
    Trying pattern rule with stem `main.y'. 
    Trying implicit prerequisite `../../build/obj/s.main.y'. 
    Trying pattern rule with stem `main.y'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.y'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.l'. 
    Looking for a rule with intermediate file `../../build/obj/main.l'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.l'. 
    Trying implicit prerequisite `../../build/obj/main.l,v'. 
    Trying pattern rule with stem `main.l'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.l,v'. 
    Trying pattern rule with stem `main.l'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.l'. 
    Trying pattern rule with stem `main.l'. 
    Trying implicit prerequisite `../../build/obj/s.main.l'. 
    Trying pattern rule with stem `main.l'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.l'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.w'. 
    Looking for a rule with intermediate file `../../build/obj/main.w'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.w'. 
    Trying implicit prerequisite `../../build/obj/main.w,v'. 
    Trying pattern rule with stem `main.w'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.w,v'. 
    Trying pattern rule with stem `main.w'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.w'. 
    Trying pattern rule with stem `main.w'. 
    Trying implicit prerequisite `../../build/obj/s.main.w'. 
    Trying pattern rule with stem `main.w'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.w'. 
    Trying pattern rule with stem `main'. 
    Rejecting impossible implicit prerequisite `../../build/obj/main.w'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.cc'. 
    Looking for a rule with intermediate file `../../build/obj/main.cc'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.cc'. 
    Trying implicit prerequisite `../../build/obj/main.cc,v'. 
    Trying pattern rule with stem `main.cc'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.cc,v'. 
    Trying pattern rule with stem `main.cc'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.cc'. 
    Trying pattern rule with stem `main.cc'. 
    Trying implicit prerequisite `../../build/obj/s.main.cc'. 
    Trying pattern rule with stem `main.cc'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.cc'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.C'. 
    Looking for a rule with intermediate file `../../build/obj/main.C'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.C'. 
    Trying implicit prerequisite `../../build/obj/main.C,v'. 
    Trying pattern rule with stem `main.C'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.C,v'. 
    Trying pattern rule with stem `main.C'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.C'. 
    Trying pattern rule with stem `main.C'. 
    Trying implicit prerequisite `../../build/obj/s.main.C'. 
    Trying pattern rule with stem `main.C'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.C'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.cpp'. 
    Looking for a rule with intermediate file `../../build/obj/main.cpp'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.cpp'. 
    Trying implicit prerequisite `../../build/obj/main.cpp,v'. 
    Trying pattern rule with stem `main.cpp'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.cpp,v'. 
    Trying pattern rule with stem `main.cpp'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.cpp'. 
    Trying pattern rule with stem `main.cpp'. 
    Trying implicit prerequisite `../../build/obj/s.main.cpp'. 
    Trying pattern rule with stem `main.cpp'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.cpp'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.p'. 
    Looking for a rule with intermediate file `../../build/obj/main.p'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.web'. 
    Trying pattern rule with stem `main.p'. 
    Trying implicit prerequisite `../../build/obj/main.p,v'. 
    Trying pattern rule with stem `main.p'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.p,v'. 
    Trying pattern rule with stem `main.p'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.p'. 
    Trying pattern rule with stem `main.p'. 
    Trying implicit prerequisite `../../build/obj/s.main.p'. 
    Trying pattern rule with stem `main.p'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.p'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.web'. 
    Looking for a rule with intermediate file `../../build/obj/main.web'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.web'. 
    Trying implicit prerequisite `../../build/obj/main.web,v'. 
    Trying pattern rule with stem `main.web'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.web,v'. 
    Trying pattern rule with stem `main.web'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.web'. 
    Trying pattern rule with stem `main.web'. 
    Trying implicit prerequisite `../../build/obj/s.main.web'. 
    Trying pattern rule with stem `main.web'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.web'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.f'. 
    Looking for a rule with intermediate file `../../build/obj/main.f'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.F'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.r'. 
    Trying pattern rule with stem `main.f'. 
    Trying implicit prerequisite `../../build/obj/main.f,v'. 
    Trying pattern rule with stem `main.f'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.f,v'. 
    Trying pattern rule with stem `main.f'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.f'. 
    Trying pattern rule with stem `main.f'. 
    Trying implicit prerequisite `../../build/obj/s.main.f'. 
    Trying pattern rule with stem `main.f'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.f'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.F'. 
    Looking for a rule with intermediate file `../../build/obj/main.F'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.F'. 
    Trying implicit prerequisite `../../build/obj/main.F,v'. 
    Trying pattern rule with stem `main.F'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.F,v'. 
    Trying pattern rule with stem `main.F'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.F'. 
    Trying pattern rule with stem `main.F'. 
    Trying implicit prerequisite `../../build/obj/s.main.F'. 
    Trying pattern rule with stem `main.F'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.F'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.r'. 
    Looking for a rule with intermediate file `../../build/obj/main.r'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main'. 
    Rejecting impossible implicit prerequisite `../../build/obj/main.l'. 
    Trying pattern rule with stem `main.r'. 
    Trying implicit prerequisite `../../build/obj/main.r,v'. 
    Trying pattern rule with stem `main.r'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.r,v'. 
    Trying pattern rule with stem `main.r'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.r'. 
    Trying pattern rule with stem `main.r'. 
    Trying implicit prerequisite `../../build/obj/s.main.r'. 
    Trying pattern rule with stem `main.r'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.r'. 
    Trying pattern rule with stem `main'. 
    Rejecting impossible implicit prerequisite `../../build/obj/main.F'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.m'. 
    Looking for a rule with intermediate file `../../build/obj/main.m'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.ym'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.lm'. 
    Trying pattern rule with stem `main.m'. 
    Trying implicit prerequisite `../../build/obj/main.m,v'. 
    Trying pattern rule with stem `main.m'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.m,v'. 
    Trying pattern rule with stem `main.m'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.m'. 
    Trying pattern rule with stem `main.m'. 
    Trying implicit prerequisite `../../build/obj/s.main.m'. 
    Trying pattern rule with stem `main.m'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.m'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.ym'. 
    Looking for a rule with intermediate file `../../build/obj/main.ym'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.ym'. 
    Trying implicit prerequisite `../../build/obj/main.ym,v'. 
    Trying pattern rule with stem `main.ym'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.ym,v'. 
    Trying pattern rule with stem `main.ym'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.ym'. 
    Trying pattern rule with stem `main.ym'. 
    Trying implicit prerequisite `../../build/obj/s.main.ym'. 
    Trying pattern rule with stem `main.ym'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.ym'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.lm'. 
    Looking for a rule with intermediate file `../../build/obj/main.lm'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.lm'. 
    Trying implicit prerequisite `../../build/obj/main.lm,v'. 
    Trying pattern rule with stem `main.lm'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.lm,v'. 
    Trying pattern rule with stem `main.lm'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.lm'. 
    Trying pattern rule with stem `main.lm'. 
    Trying implicit prerequisite `../../build/obj/s.main.lm'. 
    Trying pattern rule with stem `main.lm'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.lm'. 
    Trying pattern rule with stem `main'. 
    Rejecting impossible implicit prerequisite `../../build/obj/main.r'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.s'. 
    Looking for a rule with intermediate file `../../build/obj/main.s'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.S'. 
    Trying pattern rule with stem `main.s'. 
    Trying implicit prerequisite `../../build/obj/main.s,v'. 
    Trying pattern rule with stem `main.s'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.s,v'. 
    Trying pattern rule with stem `main.s'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.s'. 
    Trying pattern rule with stem `main.s'. 
    Trying implicit prerequisite `../../build/obj/s.main.s'. 
    Trying pattern rule with stem `main.s'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.s'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.S'. 
    Looking for a rule with intermediate file `../../build/obj/main.S'. 
    Avoiding implicit rule recursion. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.S'. 
    Trying implicit prerequisite `../../build/obj/main.S,v'. 
    Trying pattern rule with stem `main.S'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.S,v'. 
    Trying pattern rule with stem `main.S'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.S'. 
    Trying pattern rule with stem `main.S'. 
    Trying implicit prerequisite `../../build/obj/s.main.S'. 
    Trying pattern rule with stem `main.S'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.S'. 
    Trying pattern rule with stem `main'. 
    Rejecting impossible implicit prerequisite `../../build/obj/main.S'. 
    Trying pattern rule with stem `main'. 
    Trying implicit prerequisite `../../build/obj/main.mod'. 
    Looking for a rule with intermediate file `../../build/obj/main.mod'. 
    Avoiding implicit rule recursion. 
    Trying pattern rule with stem `main.mod'. 
    Trying implicit prerequisite `../../build/obj/main.mod,v'. 
    Trying pattern rule with stem `main.mod'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.mod,v'. 
    Trying pattern rule with stem `main.mod'. 
    Trying implicit prerequisite `../../build/obj/RCS/main.mod'. 
    Trying pattern rule with stem `main.mod'. 
    Trying implicit prerequisite `../../build/obj/s.main.mod'. 
    Trying pattern rule with stem `main.mod'. 
    Trying implicit prerequisite `../../build/obj/SCCS/s.main.mod'. 
    No implicit rule found for `../../build/obj/main.o'. 
    Finished prerequisites of target file `../../build/obj/main.o'. 
    Must remake target `../../build/obj/main.o'. 
+0

Вау, это 'Makefile' кажется мне довольно сложным. Вы можете попытаться указать правила сборки для каждого файла '.o' отдельно (поскольку я не уверен, что содержит ваша переменная' OBJ'). Например: 'main.o: $ (CC) main.c' И затем' main: main.o' – ForceBru

+0

Убедитесь, что имя файла вашего файла действительно 'Makefile'. – Matsmath

+1

вы можете использовать CMake для получения кросс-платформенного «makefile» –

ответ

3

зависимости для правила

$(ODIR)/%.o: %.cpp $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

не удовлетворены: в то время как make находит main.cpp OK не находит зависимости от $(DEPS). Вы можете решить эту проблему, указав IDIR в правильный каталог:

IDIR = = ../../../inc/application 

Правда, сообщение об ошибке не совсем полезно.

+0

Спасибо! Я пробовал этот подход, и он работает. Тем не менее я задаюсь вопросом: считал, что это сработает, поскольку я включил библиотеки, например. '#include" приложения/app_main.h' в файлах .cpp ... Так что инк/приложения inc/core и т. д. все должны быть включены напрямую? – VanGoghsCoffee

+0

@VanGoghsCoffee: 'make' не смотрит на содержимое файлы. Только потому, что вы включаете файлы с путём, не делайте 'make' искать зависимости в другом месте. Если вы хотите, чтобы зависимости определялись в зависимости от того, как они включены, посмотрите параметры зависимостей компилятора (например, '-M' и family) –

+0

Спасибо большое! Это мне было непонятно. Мысль' inc/'будет работать как корневой путь ко всем моим заголовочным каталогам. – VanGoghsCoffee

0

Я не знаю, почему ваше нижнее неявное правило не работает.

$(ODIR)/%.o: %.cpp $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

Но, в это место, пожалуйста, попробуйте использовать следующую static pattern rule, чтобы объектные файлы:

$(OBJ): $(ODIR)/%.o: %.cpp $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

Очень похожий вопрос был задан здесь - GNU Make pattern to build output in different directory than src. Я попробовал этот ответ для созданного вами каталога, и он сработал.

Пожалуйста, дайте мне знать, если бы я добавил это как комментарий. Я не мог понять, что было правильно.

+0

Спасибо! «Пробовал этот подход. Теперь сообщение об ошибке« make: *** No rule to make target »../../../inc/app_game_state.h ', необходимое для« ../../build/ obj/main.o '. Stop.' – VanGoghsCoffee

+0

Правда, я пропустил это. Как вам ответил @VanGoghsCoffee, вам также придется соответствующим образом модифицировать IDIR. Таким образом, помимо получения более точной ошибки ors from 'make', нет причин использовать правило статического шаблона вместо вашего неявного правила. – Gautham

Смежные вопросы