Как автоматически создавать Makefile'ы ?

Модератор: Модераторы разделов

Аватара пользователя
KOT
Сообщения: 21

Как автоматически создавать Makefile'ы ?

Сообщение KOT »

С CBuilder'a я перешел на GCC+mc. Для написания лаб в универ мне хватает. Когда пишу прогу из нескольких модулей, пишу Makefile, например:
CFLAGS += -Wall -g
all: main
scaner.o: scaner.cpp scaner.h
g++ -c $(CFLAGS) scaner.cpp
diagram.o: diagram.cpp diagram.h scaner.h semantics.h
g++ -c $(CFLAGS) diagram.cpp
semantics.o: semantics.cpp semantics.h
g++ -c $(CFLAGS) semantics.cpp
main.o: main.cpp diagram.h
g++ -c $(CFLAGS) main.cpp
main: main.o semantics.o diagram.o scaner.o
g++ $(CFLAGS) main.o semantics.o diagram.o scaner.o -o main
clean:
rm *.o ./main
Подкажите как автоматически создавать Makefile'ы, как это делает KDevelop.
Зарание благодарен.
Спасибо сказали:
Аватара пользователя
edoc_modnar
Бывший модератор
Сообщения: 1638
Статус: Форум больше не посещаю

Re: Как автоматически создавать Makefile'ы ?

Сообщение edoc_modnar »

So long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
Спасибо сказали:
Аватара пользователя
KOT
Сообщения: 21

Re: Как автоматически создавать Makefile'ы ?

Сообщение KOT »

random_code писал(а):
25.03.2006 19:59
http://beta.linux.org.ru/books/GNU/automak...ake-ru_toc.html
http://beta.linux.org.ru/books/GNU/autocon...onf-ru_toc.html

Но в данном случае оно того не стОит.

Да данном примере(или более простом) можно продемонстрировать...., ну для наглядности.
Ну пожалуйта... :)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Как автоматически создавать Makefile'ы ?

Сообщение flook »

:angry: Друг! Если ты настолько ленив, чтобы разобраться в automake-&-co, то чего тебя вообще в программирование потянуло?
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Как автоматически создавать Makefile'ы ?

Сообщение Zeus »

flook писал(а):
27.03.2006 11:36
:angry: Друг! Если ты настолько ленив, чтобы разобраться в automake-&-co, то чего тебя вообще в программирование потянуло?

А в программисты ленивые и идут В)
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Как автоматически создавать Makefile'ы ?

Сообщение flook »

Zeus писал(а):
27.03.2006 11:47
А в программисты ленивые и идут В)

В программисты на Java/.NET и им подобные если только :P просьба не обобщать в любом случае.
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Как автоматически создавать Makefile'ы ?

Сообщение t.t »

Код, дуже тобі дякую. Серьёзно; давно про авто* почитать собираюсь, да по-ангельски читать всё лень, а на родном чё-то не нашёл.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Как автоматически создавать Makefile'ы ?

Сообщение v04bvs »

KOT писал(а):
25.03.2006 19:24
С CBuilder'a я перешел на GCC+mc. Для написания лаб в универ мне хватает. Когда пишу прогу из нескольких модулей, пишу Makefile

Я один раз написал Makefile и потом его без каких-либо изменений использовал во всех универских программах. Почитайте внимательно info make и man gcc (ну или вот мой, он для С, переделать для C++ не составит труда, на английский не обращайте внимания :) )

Код: Выделить всё

# It is universal Makefile for simple programs in C language
# It can automatically processed all source files in current directory
# In current directory can be placed only 1 project

################# Text below must be changed ############################


# Project options

# name of the binary file of the program
program_name = $(shell basename $(shell pwd))

# all .c files needed by project. By default uses all .c files
sources = $(wildcard *.c)


# compiler options

# Which command for compile and linking programs must be used
CC = gcc
# Flags for compiling .c files and for linking .o files into single binary
CFLAGS = -Wall
# Flags for preprocessing. It only used when compiling .c files
CPP =
# Flags for linking. It only used when linking .o files
LDFLAGS =



################## Text below must *not* be changed #######################

.PHONY: all, clean, distclean

all: $(program_name)

clean:
rm -f $(program_name) $(sources:%.c=%.o)

distclean:
rm -f $(program_name) $(sources:%.c=%.o) $(sources:%.c=.%.d)

$(program_name): $(sources:%.c=%.o)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^

%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -MMD -MF $(<:%.c=.%.d) -MP -c -o $@ $<

-include $(sources:%.c=.%.d)
Спасибо сказали: