Уважаемые, помогите... У меня проээкт писаный на сях++ .. модули раскиданные в разных поддиректориях как правильно пишутся make-файлы для них. Ведь писать один макефайл.. ложить его в корень.. а потом в при каждом случае .. вносить в него изменния (к примеру добавился ешо один модул.. и соответсвенно ешо одна поддиректория).. не есть хорошо. Возможно я не всё так хорошо понял про макефайлы. Ну тогда объясните ... кто понял ХОРОШО..
lastcross wrote:
> Уважаемые, помогите... У меня проээкт писаный на сях++ .. модули
> раскиданные в разных поддиректориях как правильно пишутся make-файлы для
> них. Ведь писать один макефайл.. ложить его в корень.. а потом в при
> каждом случае .. вносить в него изменния (к примеру добавился ешо один
> модул.. и соответсвенно ешо одна поддиректория).. не есть хорошо.
> Возможно я не всё так хорошо понял про макефайлы. Ну тогда объясните ...
> кто понял ХОРОШО..
Как мне казалось, принято делать в каждой директории Makefile,
собирающий всё в своей директории и делающий make -C для дочерних. В
связке autotools=automake+autoconf+libtool так принято. Таким образом,
Makefile каждого уровня правится при изменениях на этом уровне. Что в
этом нехорошо?
Posted via RSDN NNTP Server 2.0 beta
Здравствуйте, lastcross, Вы писали:
L>Уважаемые, помогите... У меня проээкт писаный на сях++ .. модули раскиданные в разных поддиректориях как правильно пишутся make-файлы для них. Ведь писать один макефайл.. ложить его в корень.. а потом в при каждом случае .. вносить в него изменния (к примеру добавился ешо один модул.. и соответсвенно ешо одна поддиректория).. не есть хорошо. Возможно я не всё так хорошо понял про макефайлы. Ну тогда объясните ... кто понял ХОРОШО..
Просто две статьи в тему
http://www.citforum.ru/operating_systems/gnumake/index.shtml
http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html
Здравствуйте, lastcross, Вы писали:
L>Уважаемые, помогите... У меня проээкт писаный на сях++ .. модули раскиданные в разных поддиректориях как правильно пишутся make-файлы для них. Ведь писать один макефайл.. ложить его в корень.. а потом в при каждом случае .. вносить в него изменния (к примеру добавился ешо один модул.. и соответсвенно ешо одна поддиректория).. не есть хорошо. Возможно я не всё так хорошо понял про макефайлы. Ну тогда объясните ... кто понял ХОРОШО..
Я часто занимаюсь сборкой.
В каждой папке где это надо лежат свои макефайлы.
Тоесть там макефайл не только собирает что надо но и "запускает" другие.
Мой тебе совет — возьми какой-ть проект в исходниках и посмо3.
К томуже насколько я понял тотже kdevelop может тебе и configure для проекта сделать который в свою очередь макефайлами и разруливает...
..Вся проблемка в том что проэкт.. под QNX .. Но всеравно спасибо
Здравствуйте, Eugene Kilachkoff, Вы писали:
EK>Здравствуйте, lastcross, Вы писали:
L>>Уважаемые, помогите... У меня проээкт писаный на сях++ .. модули раскиданные в разных поддиректориях как правильно пишутся make-файлы для них. Ведь писать один макефайл.. ложить его в корень.. а потом в при каждом случае .. вносить в него изменния (к примеру добавился ешо один модул.. и соответсвенно ешо одна поддиректория).. не есть хорошо. Возможно я не всё так хорошо понял про макефайлы. Ну тогда объясните ... кто понял ХОРОШО..
EK>Просто две статьи в тему
EK>http://www.citforum.ru/operating_systems/gnumake/index.shtml
EK>http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html
А по этим ссылкам ничего нет...решающего мою "проблему".. Я понимаю что я тупю ... но покажите на пальцах. Есть Директория Main в ней Main.cpp и поддиректория Test.. в ней соответсвенно Test.cpp и Test.h Внутри Main.cpp есть соответсвенно #include "./Test/Test.h" (используя функцию которая внутри "Test.cpp").. Теперь вопрос где и какой Makefile я должен положить (т.е мне интересно и его содержание тоже — или их, если Makefile-ов Вы предпологаете несколько). Хотелось бы собрать всё это тока одной коммандой (make).. К сведению .. ОС — у меня QNX .. без всяких там IDE .. так как "спец оборудование" весьма тугое ... приходится работать руками... А всё что пишут в доках .. либо сильно мутно... либо же,тока по каким-то странностям, ... все модули валяются в корневом каталоге проэкта...
Вопрос остался открытым.. Чего мне делать?.. Присылайте примеры.. повозможности..
Здравствуйте, lastcross, Вы писали:
L>А по этим ссылкам ничего нет...решающего мою "проблему".. Я понимаю что я тупю ... но покажите на пальцах. Есть Директория Main в ней Main.cpp и поддиректория Test.. в ней соответсвенно Test.cpp и Test.h Внутри Main.cpp есть соответсвенно #include "./Test/Test.h" (используя функцию которая внутри "Test.cpp").. Теперь вопрос где и какой Makefile я должен положить (т.е мне интересно и его содержание тоже — или их, если Makefile-ов Вы предпологаете несколько). Хотелось бы собрать всё это тока одной коммандой (make).. К сведению .. ОС — у меня QNX .. без всяких там IDE .. так как "спец оборудование" весьма тугое ... приходится работать руками... А всё что пишут в доках .. либо сильно мутно... либо же,тока по каким-то странностям, ... все модули валяются в корневом каталоге проэкта...
L>Вопрос остался открытым.. Чего мне делать?.. Присылайте примеры.. повозможности..
Для gnu toolchain, делаете, например, такое дерево:
/Main
Main.cpp
Makefile
/Test
Test.mk
Test.cpp
Test.h
/Build
Main.exe
Main.o
/Test
Test.o
Test.d
Test.mk -- фрагмент мейкфайла примерно такого содержания:
SRC += Test.cpp
Makefile:
CXX := your_compiler
CXXFLAGS := flags_you_need
LDFLAGS := аналогично
LIBS := опять-таки
target := Build/Main.exe
include Test/Test.mk
SRC += Main.cpp
OBJ := $(patsubst %.cpp,Build/%.o,$(SRC))
DEP := $(patsubst %.cpp,Build/%.d,$(SRC))
Build/%.o: %.cpp
$(CXX) -c $(CXXFLAGS) -o $@ $<
Build/%.d: %.cpp
$(CXX) -MM $(CXXFLAGS) $< > $@
-include $(DEP)
$(target): $(OBJ)
$(CXX) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
Добавление новых модулей сводится к писанию тривиальных фрагментов и их включению в главный. Совсем правильное структурирование немножко сложнее, но для начала сойдет и так. Добавление целей clean, backup и т.д. оставляю как упражнение. Будут вопросы, пишите. Если где опечатки, не обессудьте.