Here:
OBJ= main.o ../objects/%.o: %.cpp $(DEPS) $(CC) -c $< $(CFLAGS)
This makefile contains one rule, which is a template rule, a way to create any file with a name like ../objects/foo.o . But he does not tell Make which object file he should build. To be precise, a template rule cannot be the default rule.
The easiest way to fix this is to add a regular rule:
../objects/$(OBJ):
Once you have this work, you will have object files, but there are still problems in the main makefile. The run rule will not create an executable file, and if you want to execute this rule, you will have to call it on the command line, it will not automatically follow.
You are trying to use the recursive use of Make - which is difficult before you master the basics. I suggest you try using the makefile to create the object files, and then try to create the executable using the command line, and then carefully look at the command you used and rewrite the run rule.
Once you achieve this, other improvements are possible. (Make is a powerful tool, but it has a long learning curve.)
EDIT: If it doesn't work at all, try something simpler first.
Select the source file in ceda_lib , for example, I do not know main.cpp . Make sure that the source file exists and that the corresponding object file ( main.o ) is not working. Edit the makefile (in ceda_lib/ ):
main.o: main.cpp $(CC) -c $< $(CFLAGS)
Then in ceda_lib/ try make and see what happens.
If it builds main.o , remove main.o and then from project/ try make -C ceda_lib and see what happens. If this ceda_lib/main.o , then we can move on to more advanced makefiles.