Изучаю make-файлы в Linux. Есть такая проблема. Проект разбит по категориям:
makefile recursion---->TopMakeFile(файл), src
src----> src1, src2, mkf
src1----> sources, makefile(файл)
src2----> sources, makefile(файл)
mkf---->compile.mk(файл)
src1---> makefile
include ../mkf/compile.mk
OBJ:=$(wildcard ./obj/*.obj)
COMPILEMK:=../mkf/compile.mk
./bin/main : $(OBJ) begin
g++ -o $@ $(OBJ)
begin :
mkdir -p obj bin
$(OBJ): compile.mk
make -C $(COMPILEMK)
у Листинга 2 (src2) тоже аналогичный код... нет смысла написать. Теперь в Листинге 3 код файла compile.mk:
SOURCES:=$(wildcard ./../src1/sources/*.cpp)
OBJECTS:=$(patsubst ./../src1/sources/%.cpp, ./../src1/obj/%.o, $(SOURCES))
DEPENDS:=$(patsubst ./../src1/sources/%.cpp, ./../src1/obj/%.dep, $(SOURCES))
./../src1/obj/%.o : ./../src1/sources/%.cpp ./../src1/headers/%.hpp
g++ -c $< -o ./../src1/obj/%.cpp
./../src1/obj/%.dep : ./../src1/sources/%.cpp
g++ -MM $< -MT "$@ $(patsubst ./../src1/obj/%.dep, ./../src1/obj/%.o, $@)" -o $@
-include $(DEPENDS)
Листинг 3
В листинге 4 приведен код TopMakeFile
SOURCES=./src1 ./src2
MAKE=make
all:
for dir in $(SOURCES); do $(MAKE) -C $$dir; done
Листинг 4
Теперь когда отдельно вызываю из папок src1, src2 свои локлаьные маке файлы (для проверки работоспособности) появляются ошибки
grigorii@grigorii-System:~/makefile recursion/src/src1$ make
g++ -MM ../src1/sources/main.cpp -MT "../src1/obj/main.dep ../src1/obj/main.dep" -o ../src1/obj/main.dep
cc1plus: fatal error: opening output file ../src1/obj/main.dep: No such file or directory
compilation terminated.
g++ -MM ../src1/sources/add.cpp -MT "../src1/obj/add.dep ../src1/obj/add.dep" -o ../src1/obj/add.dep
cc1plus: fatal error: opening output file ../src1/obj/add.dep: No such file or directory
compilation terminated.
mkdir -p obj bin
g++ -o bin/main
g++: fatal error: no input files
compilation terminated.
make: *** [bin/main] Error 4
Думаю не смысла вызывать TopMakeFile, потому что в локальных есть ошибки. Как поправить коды файлов и что это за ошибки. Спасибо