Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > include в Makefile


Автор: georain 28.1.2008, 04:45
Подскажите, как в Makefile (для GNU make) записывать цели в дерикториях,
например есть:

main.o: main.cpp headA.h headB.h
                 g++ -c main.cpp

Теперь я хочу чтобы headA.h и headB.h лежали в ./include/
Как мне написать?

И можно ли чтобы заголовочные файлы автоматически в ./include искались?

Извините не нашёл нигде.


Автор: georain 28.1.2008, 05:41
У меня тут ещё вопрос возник, а что если у меня заголовочный файл сам зависит от другого заголовочного файла (headC.h)?

Автор: archimed7592 28.1.2008, 08:53
Разве make не умеет разруливать зависимость от заголовочных файлов сам? Если нет, то точно есть штуковина, делающая это автоматически(то ли g++ --bla-bla-bla ... , то ли сам make нужно с какими-то параметрами запустить).

Автор: georain 28.1.2008, 09:11
Было бы очень хорошо, если так.
Мне в принципе это и нужно.

Автор: Mayk 28.1.2008, 09:58
Цитата(archimed7592 @  28.1.2008,  12:53 Найти цитируемый пост)
Если нет, то точно есть штуковина, делающая это автоматически(то ли g++ --bla-bla-bla ... , то ли сам make нужно с какими-то параметрами запустить).

есть даже несколько штуковин. во-первых да, сам gcc [не помню правда параметры, -MQ что ли?], во-вторых есть такие штуки как makedep или makedepend. правда не знаю делают ли они работу сами, либо используют gcc.
Цитата(georain @  28.1.2008,  13:11 Найти цитируемый пост)
Мне в принципе это и нужно.

rtfm тогда. гсс это точно делать умеет. 

Автор: archimed7592 28.1.2008, 12:20
georain, у сейчас нет времени проверять, но сделать это очень просто.
Что-то вроде Makefile'а
a.o : a.cpp
b.o : b.cpp
p.exe : a.o b.o
Создаёшь a.cpp, b.cpp, a.h, b.h, ab.h.
В a.cpp инклудишь a.h и ab.h.
В b.cpp - b.h и ab.h.
Делаешь make p.exe.
Изменяешь a.h - должен должна произойти перекомпиляция только a.o и p.exe.
Изменяешь ab.h - должна произойти перекомпиляция обойх модулей.
Если так, то make сам умеет разруливать зависимость от хидэров.

Автор: JackYF 28.1.2008, 12:28
Цитата(archimed7592 @  28.1.2008,  11:20 Найти цитируемый пост)
Если так, то make сам умеет разруливать зависимость от хидэров.

нет, не умеет smile надо подставлять с помощью include, или скриптом, или другим мэйкфайлом файлик, сгенеренный gcc.

Цитата(Mayk @  28.1.2008,  08:58 Найти цитируемый пост)
не помню правда параметры, -MQ что ли?

-MM, -M, -MF

Автор: georain 29.1.2008, 11:15
А как подставлять с помощью include, или скриптом, или другим мэйкфайлом файлик, сгенеренный gcc?
Или где литературу найти?

Я раньше проект весь целиком компилил, когда кода ещё не много было, а сейчас уже заметно стало.

Автор: warmonger_ 29.1.2008, 11:17
Цитата(georain @  29.1.2008,  11:15 Найти цитируемый пост)
Или где литературу найти?

http://www.gnu.org/software/make/manual/make.html

Автор: Mayk 29.1.2008, 17:36
Пример использвоания утилиты gccmakedep[не знаю где брал].

код до запуска make dep
Код

OFILES=snd_linux.o
CFLAGS=-ggdb -pg -g -I$(HOME)/bin/include
..скучно..
dep:; gccmakedep -- $(CFLAGS) -- *.cpp
..скучно..


код после make dep
Код

OFILES=snd_linux.o
CFLAGS=-ggdb -pg -g -I$(HOME)/bin/include
..скучно..
dep:; gccmakedep -- $(CFLAGS) -- *.cpp
..скучно..
# DO NOT DELETE
snd_linux.o: snd_linux.cpp /usr/include/SDL/SDL.h \
  /usr/include/SDL/SDL_main.h /usr/include/SDL/SDL_stdinc.h \
  /usr/include/SDL/SDL_config.h /usr/include/SDL/SDL_platform.h \
..скучно..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)