Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: auto make  (Прочитано 9467 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 22-08-2009 07:53 » 

auto make

заколебался редактировать Makefile:
Код:
CFLAGS=-Wall -Wextra --pedantic -g -I/usr/X11R6/include `pkg-config --cflags cairo`
LDFLAGS=-Wall  -Wextra --pedantic -g `pkg-config --libs cairo` -L/usr/X11R6/lib -lX11

all: 2cario

2cario: main.o cairo_window.o factory.o shape_quad.o xlib_cairo_window.o
g++ -o 2cario ${LDFLAGS} main.o factory.o cairo_window.o shape_quad.o xlib_cairo_window.o
main.o: main.cpp window.h factory.h
g++ -o main.o ${CFLAGS} -c main.cpp
cairo_window.o: cairo_window.cpp cairo_window.h window.h
g++ -o cairo_window.o ${CFLAGS} -c cairo_window.cpp
xlib_cairo_window.o: xlib_cairo_window.cpp xlib_cairo_window.h cairo_window.h window.h
g++ -o xlib_cairo_window.o ${CFLAGS} -c xlib_cairo_window.cpp
factory.o : factory.cpp xlib_cairo_window.h window.h shape.h shape_quad.h
g++ -o factory.o ${CFLAGS} -c factory.cpp
shape_quad.o : shape_quad.cpp  window.h shape.h shape_quad.h
g++ -o shape_quad.o ${CFLAGS} -c shape_quad.cpp

может имеются какие тулзы, которые пропарсят исходники и хидеры в каталоге на предмет зависимостей и относительно автоматически создадут Makefile ?

Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 22-08-2009 08:23 » 

Смотри в сторону cmake.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 22-08-2009 09:32 » 

У 'GCC' есть опция '-M' которая формирует все зависимости от заголовочных файлов:
Код:
gcc -M main.c
используй ее.
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #3 : 22-08-2009 17:29 » new

У 'GCC' есть опция '-M' которая формирует все зависимости от заголовочных файлов:
Код:
gcc -M main.c
используй ее.

ок отлично команда g++ -M -MM *.cpp выдала:
Код:
cairo_window.o: cairo_window.cpp cairo_window.h window.h
carioWindow.o: carioWindow.cpp xlib_cairo_window.h cairo_window.h \
  window.h
current.o: current.cpp
factory.o: factory.cpp factory.h window.h shape.h xlib_cairo_window.h \
  cairo_window.h shape_quad.h png_cairo_window.h shape_rect.h
main.o: main.cpp factory.h window.h shape.h
png_cairo_window.o: png_cairo_window.cpp png_cairo_window.h \
  cairo_window.h window.h
shape_quad.o: shape_quad.cpp shape_quad.h shape.h window.h
shape_rect.o: shape_rect.cpp shape_rect.h shape.h window.h
xlib_cairo_window.o: xlib_cairo_window.cpp xlib_cairo_window.h \
  cairo_window.h window.h

что оказалось даже более точно, чем воссозданые мной вручную зависимости ...
может есть возможность между строчек записать команды для исполнения этих зависимостей?
Записан

1n c0de we trust
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 22-08-2009 18:14 » 

Mayor, надеюсь сможешь разобраться.

Обычно используют что то подобное:
Код:
$ ls
Makefile  func.c  func.h  main.c
-----------------------------------------
$ cat Makefile
PROG := prog
CC := gcc
CFLAGS := -O
OBJS := $(patsubst %.c,%.o,$(wildcard *.c))

.PHONY = dep clean

$(PROG): $(OBJS)
        $(CC) -o $@ $(OBJS)

dep:
        $(CC) -M $(wildcard *.c) > ./.depend

clean:
        rm -f *.o ./.depend $(PROG)

%.o: %.c
        $(CC) -c $(CFLAGS) -o $@ $<

ifneq ($(wildcard ./.depend),)
include ./.depend
endif
-----------------------------------------
$ cat func.c
#include <stdio.h>
#include "func.h"

void func(void)
{
        printf("My function.\n");
}
-----------------------------------------
$ cat func.h
#ifndef _FUNC_H
#define _FUNC_H

extern void func(void);

#endif  /* _FUNC_H */
-----------------------------------------
$ cat main.c
#include "func.h"

int main(void)
{
        func();
        return 0;
}
-----------------------------------------
# сформировать файл зависимостей
$ make dep
gcc -M func.c main.c > ./.depend
-----------------------------------------
# собрать проект
$ make
gcc -c -O -o func.o func.c
gcc -c -O -o main.o main.c
gcc -o prog func.o main.o
-----------------------------------------
# очистить проект
$ make clean
rm -f *.o ./.depend prog
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines