The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как создать Makefile с рекурсией дерикторий."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от pavlinux email(ok) on 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 ?
  



Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от primus on 11-Дек-09, 20:37 
Может быть autotools поможет?
Ниже цитата
"Automake -- система автоматического создания Makefile'ов для крупных проектов. Automake очень тесно работает совместно с Autoconf, позволяя с помощью буквально двух десятков строк создавать огромные Makefile'ы, которые обрабатывают огромное количество возможностей, по сборке и установке пакета, к которым привыкли все пользователи современных программ с открытыми исходниками."
Здесь начало http://squadette.ru/autotools-ru/article1.html
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от pavlinux email(ok) on 11-Дек-09, 20:41 
>Может быть autotools поможет?

Это всё понятно, но надо минимизировать всё до минимума. (хорошо сказал :))

Есть ещё веселее, autoproject зовётся - http://packages.debian.org/unstable/devel/autoproject

Думается, придётся в обратном направлении делать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от аноним on 12-Дек-09, 02:40 
>Может быть autotools поможет?

Советовать autotools при наличии cmake по меньшей мере глупо, по большей - вредно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от jd (??) on 11-Дек-09, 23:49 
>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 не видит вообще.

А что ему ещё компилировать? По-умолчанию (без указания цели) выполняется первая цель. В вашем случае нужно добавить в начало Makefile что-то вроде (для GNU make):


.PHONY: all

all: $(subst .cpp,.o,$(wildcard *.cpp))


и будет вам счастье. Точнее, будет вам то, что вы пытаетесь получить.


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

Всё решает (опять же, для GNU make) $(shell ...) и find.

Вообще, если вы используете GNU make, настоятельно рекомендую почитать по нему info - очень увлекательное чтиво, не говоря уже о пользе. Если вы используете другой make и у него нет аналогичного функционала... даже и не знаю, что сказать. Разве что посочувствовать...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от аноним on 12-Дек-09, 02:42 
Если становится неудобно использовать обычный make, лучше песмотреть на что-то более высокоуровневое. Без вариантов CMake.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от pavlinux email(ok) on 12-Дек-09, 16:10 
>Если становится неудобно использовать обычный make, лучше песмотреть на что-то более высокоуровневое.
>Без вариантов CMake.

Светка ты что ль? :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Как создать Makefile с рекурсией дерикторий."  +/
Сообщение от аноним on 13-Дек-09, 06:26 
>Светка ты что ль? :)

Хренетка, иди проспись.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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