LINUX.ORG.RU

Проблемы с MakeFile


0

2

Изучаю 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, потому что в локальных есть ошибки. Как поправить коды файлов и что это за ошибки. Спасибо

Ответ на: комментарий от kdev

make в ходе своей работы строит дерево зависимостей и работает итеративно, то есть дойдя до

 begin :
         mkdir -p obj bin
добовляет каталоги bin и obj и снова идет вверх, то есть на самом деле мне кажется позиция каталогов bin и obj не является источником данной ошибки. Если что так не сказал поправте пожайлсута ятолько учусь строить make файлы.... Очень прошу многоуважаемые линуксоиды не можете ли сказать конкретно где что не так написано, что в частности является причиной данных ошибок и в каком направлени копать дальше. С английским так не особо дружу... ну так получилось в входе обстоятельств то есть из сети и прочей литературы для меня доступен только русскоязычная часть..... да и наконец может отладка «мake -d» что-то даст ?

neutrino
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.