Здравствуйте! Написал здоровенную прогу на С++ под Linux с большим количеством поддиректорий, в которых хранятся сишные файлы и хедеры. Проблема теперь осталась одна - создать makefile, который бы находился в головной директории (abc) проекта, причем: файлы .cxx располагаются в различных поддиректориях (abc/*/*.cxx) там же находятся соответствующие файлы .h Данный makefile должен создавать исполняемый файл с именем, например, anr, в той же директории, где находится сам makefile. Компилятор - gcc. OC - Linux. Начал делать: source_dirs := subdir1 subdir2 subdir3 subdir4 subdir5 subdir6 search_wildcard s := */*.cxx anr: $(notdir $(patsubst %.cxx,%.o,$(wildcard $(search_wildcard s)))) gcc $^ -o $@ Это, разумеется не все. Это только начало. Только проблема - уже этот код не работает, т.е. не создаются объектные файлы .o. Наверно, потому что у меня файл, например, file1.cxx имеет первые 1-ую строку вида #include "subdir1/file.h" И команда make пытается, находясь уже в subdir1, найти в ней файл subdir1/file.h, которого, естественно, там нет. Как это побороть? Естественно, вариант убрать путь к хедерам из директив include не проходит, так как файлов .cxx у меня > 100 штук. Не исключаю, что 1-ая строка моего makefile'а не нужна, а 3-ья - просто неправильна. Помогите, пожалуйста, исправить и дописать.
А потом сделать один головной makefile в верхней директории, из которого вызывать остальные? Как сделать этот вызов? Командой @make -s -C $(subdir1) subdir1 или как-то по-другому? И что значит subdir1 в конце этой строки? Ведь все равно придется убирать путь к хедерам из директив include всех сишных файлов, так?