The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Как создать Makefile с рекурсией дерикторий."
Отправлено pavlinux, 11-Дек-09 02:25 
0. В документацию не посылать, читал не помогает, читал ещё раз, тоже самое. :)

1. Есть проект с деревом каталогов, в котором живут исходники.
2. Вот, на половину рабочий Makefile

.SUFFIXES =
.SUFFIXES = .cpp .o

CXX = g++
CFLAGS = -g -O2
WARN = -W -Wall
FLAGS := $(CFLAGS) $(DEBUG) $(WARN)
INCLUDE = -I. -I../ -I../../ -I../../../

SUBDIRS = alpha/db2  alpha/db3 beta/data gamma/os gamma/os/lnx gamma/os/bsd gamma/os/win

.PHONY: subdirs $(SUBDIRS)

subdirs: $(SUBDIRS)

$(SUBDIRS):
        $(MAKE) CXXFLAGS="$(FLAGS) $(INCLUDE)" -C $(D@) $@

# EOF Make

3. Исходники живут в директориях $(SUBDIRS), там же живут хедеры.

Например каталог gamma/os/lnx, содержит:

main_lnx.cpp
coops.cpp

и каталог include, то есть gamma/os/lnx/include
Все зависимости в хедерах разрешены через #inclide, в соответствующих исходниках,
с ними проблем нет

4. Перед тем как запускать make, в каждом каталоге с исходниками,
создаем Makefile c зависимостями.

Делаем это командой:

g++ -I. -I../ -I../../ -I../../../ -MM *.cpp > Makefile;

1-ая проблема - на примере того же каталога gamma/os/lnx

После создания Makefile c зависимостями, он выглядит следующим образом:

main_lnx.o: main_lnx.cpp ./include/main_lnx.h ../os/include/main.h
coops.o: coops.cpp ./include/main_lnx.h ../os/include/main.h

Когда в этот каталог заходит make -C gamma/os/lnx/
Компилируется только main_lnx.o, такое ощущение что coops.cpp не видит вообще.

2-ая проблема

Как, а это возможно, автоматизировать созданий файла зависимостей,
которые вкладываются в подкаталоги?
То есть, аналог
g++ -I. -I../ -I../../ -I../../../ -MM *.cpp > Makefile;
перед make -C ....мдя..... я не тормоз,......
вот и ответил на вопрос - надо поместить перед make  -C  :)

3-ая проблема

Как сделать рекурсивное брождение (от слова бродить) make, по подкаталогам,
а не указание их на прямую $(SUBDIR) ?

Например, в корне проекта есть куча папок, 20, 30,... 100

1. Возможно, не указывая их поимённо, рекурсивно компилировать исходники?
   учитывая, то что внутри каждого ещё могут быть 2,3 уровня вложений?
  
2. Или вариант с указанием только каталогов 1-ого уровня
   например, только каталогов alpha, beta и gamma ?
  



 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру