Изучаю make-файлы в Linux. Есть такая проблема.
Проект разбит по категориям:
makefile recursion---->TopMakeFile(файл), src
src----> src1, src2, mkf
src1----> sources, makefile(файл)
src2----> sources, makefile(файл)
mkf---->compile.mk(файл)
То есть и у src1 и у src2 есть свой локальные makefile, где во время выполнения make file создаются в папках src1и src2 еще 2 папки bin и obj, то есть получается такая структира src1----> sources, makefile(файл), bin, obj и src2----> sources, makefile(файл), bin, obj. Соответственно объектные файлы в obj, a бинарнки в bin. Файл compile.mk должен из исходников .cpp и .hpp создать объектные файлы и положить в obj папку соответствующего src..(1 || 2). Вот листинги
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)
Листинг 1
у Листинга 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, потому что в локальных есть ошибки. Как поправить коды файлов и что это за ошибки. Спасибо