зависимости .cpp от .h. Как?
От: _Winnie Россия C++.freerun
Дата: 03.11.05 11:53
Оценка:
Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.

Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
Правильно работающая программа — просто частный случай Undefined Behavior
Re: зависимости .cpp от .h. Как?
От: Сергей Мухин Россия  
Дата: 03.11.05 12:09
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.


_W>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.


почему долго?
---
С уважением,
Сергей Мухин
Re: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 12:16
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.


Это даже на Ruby очень быстро работает. Все упирается в скорость чтения с диска.

_W>Как самостоятельно автоматически строить зависимости?


Могу кодом на Ruby поделиться, если хочешь. Он не сильно замороченный, даже комментарии не обрабатывает А можешь и сам на C++ написать. Хоть вручную файл просматривать, хоть через regex.

_W> Нужно для велосипедного make, генерирующегося из vcproj.


Нашего полку прибывает

Может лучше vcproj преобразовывать в какой-то уже существующий формат?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: зависимости .cpp от .h. Как?
От: _Winnie Россия C++.freerun
Дата: 03.11.05 12:20
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, _Winnie, Вы писали:


_W>>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.


_W>>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.


СМ>почему долго?


Ну, представь себе проектик из 600 .cpp файлов. Каждый из них надо проверить, и из каждого открыть еще сотню-другую .h файлов(в том числе из стандартных), и не тупо проверить даты модификации, а пройтись препроцессором. Студия с этим справляется за секунду.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[3]: зависимости .cpp от .h. Как?
От: Сергей Мухин Россия  
Дата: 03.11.05 12:24
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>>>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.


СМ>>почему долго?


_W>Ну, представь себе проектик из 600 .cpp файлов. Каждый из них надо проверить, и из каждого открыть еще сотню-другую .h файлов(в том числе из стандартных), и не тупо проверить даты модификации, а пройтись препроцессором. Студия с этим справляется за секунду.


у нас это делается приблизительно так.
при первой компиляции компилер выдает среде разработки список зависимостей (да и не только при первой). они учитываются в дереве проекта. все.
---
С уважением,
Сергей Мухин
Re[2]: зависимости .cpp от .h. Как?
От: _Winnie Россия C++.freerun
Дата: 03.11.05 12:29
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, _Winnie, Вы писали:

_W>>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.
E>Это даже на Ruby очень быстро работает. Все упирается в скорость чтения с диска.
_W>>Как самостоятельно автоматически строить зависимости?
E>Могу кодом на Ruby поделиться, если хочешь. Он не сильно замороченный, даже комментарии не обрабатывает А можешь и сам на C++ написать. Хоть вручную файл просматривать, хоть через regex.

Вот так просто?

Надо посмотреть, может ли студия разрулить кошмар вроде

#include BOOST_PP_STRINGIZE(BOOST__PP_CAT(algo, rithm))

_W>> Нужно для велосипедного make, генерирующегося из vcproj.


E>Нашего полку прибывает


E>Может лучше vcproj преобразовывать в какой-то уже существующий формат?


А во что? Для чего есть тулзы параллельного build? для boost.jam нет чего-нибудь такого?
IncredyBuild не предлагать. Почему-то он у нас глючит, и он не работает с MinGW. И стоит, зараза, космических денег.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[3]: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 12:34
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>>>Как самостоятельно автоматически строить зависимости?

E>>Могу кодом на Ruby поделиться, если хочешь. Он не сильно замороченный, даже комментарии не обрабатывает А можешь и сам на C++ написать. Хоть вручную файл просматривать, хоть через regex.

_W>Вот так просто?


Что именно "вот так просто?"
Если тебе нужно просто нормальные #include обработать, то все, действительно, просто.
А если вот это:

_W>#include BOOST_PP_STRINGIZE(BOOST__PP_CAT(algo, rithm))


то либо использовать возможности компилятора (не знаю, как VC++, а GNU C++ умеет зависимости показывать).
А еще лучше не заморачиваться на такие вещи. ИМХО.

E>>Может лучше vcproj преобразовывать в какой-то уже существующий формат?


_W>А во что? Для чего есть тулзы параллельного build? для boost.jam нет чего-нибудь такого?


Даже некоторые обычные make, имхо, умеют. И Boost.Jam, кажется, умел.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: зависимости .cpp от .h. Как?
От: Глеб Алексеев  
Дата: 03.11.05 12:35
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.

_W>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
У cl есть ключик /showIncludes. Правда, придется как-то отличать стандартные файлы от файлов проекта.

А g++ вроде тоже должен быть аналогичный ключик. Насколько я знаю (а в сборке проектов без студии — я еще тот ламер), это обычный подход. Даже для ocaml есть утилита ocamldep, которая генерит зависимости в виде
filename.cmo : filename.ml (cmo -объектник, ml — исходник).

а в конце мэйкфайла вставляешь include .depend и все.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 12:41
Оценка: 5 (1)
Здравствуйте, _Winnie, Вы писали:

_W>А во что? Для чего есть тулзы параллельного build? для boost.jam нет чего-нибудь такого?


usage: d:\bin\bjam.EXE [ options ] targets...

-a      Build all targets, even if they are current.
-dx     Set the debug level to x (0-9).
-fx     Read x instead of Jambase.
-jx     Run up to x shell commands concurrently.
-n      Don't actually execute the updating actions.
-ox     Write the updating actions to file x.
-q      Quit quickly as soon as a target fails.
-sx=y   Set variable x=y, overriding environment.
-tx     Rebuild x, even if it is up-to-date.
-v      Print the version of jam and exit.
--x     Option is ignored.


_W>IncredyBuild не предлагать. Почему-то он у нас глючит, и он не работает с MinGW. И стоит, зараза, космических денег.


На эту тему: build или make &mdash; какая разница?
Автор: NikUsv
Дата: 17.08.05
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: зависимости .cpp от .h. Как?
От: Глеб Алексеев  
Дата: 03.11.05 12:48
Оценка: :))) :)))
Здравствуйте, Глеб Алексеев, Вы писали:

ГА> Даже для ocaml есть утилита ocamldep, которая генерит зависимости в виде

ГА>filename.cmo : filename.ml (cmo -объектник, ml — исходник).
Вот здесь глупость сморозил, ocamldep именно зависимости между модулями разгребает.

(Доктор, я разговариваю сам с собой на тему ОКамл в форуме по С/С++, что мне делать?)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 12:58
Оценка: 4 (1) +1
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>(Доктор, я разговариваю сам с собой на тему ОКамл в форуме по С/С++, что мне делать?)



Напиши на RSDN статью про OCaml. А то о нем тут время от времени вспоминают. У меня даже какая-то здоровенная PDF-ка про OCaml на англицком лежит, да только времени читать нет. А если бы обзорная статья на русском -- было бы здорово.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: зависимости .cpp от .h. Как?
От: Глеб Алексеев  
Дата: 03.11.05 13:04
Оценка:
Здравствуйте, eao197, Вы писали:

E>Напиши на RSDN статью про OCaml. А то о нем тут время от времени вспоминают. У меня даже какая-то здоровенная PDF-ка про OCaml на англицком лежит, да только времени читать нет. А если бы обзорная статья на русском -- было бы здорово.


Может быть, когда нибудь. Пока только делаю первые неуклюжие шаги, рановато статьи писать. Это скорее к Quintanar'у или Gaperton'у, но они отчего-то предпочитают держать нас в неведении .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 13:07
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

E>>Напиши на RSDN статью про OCaml. А то о нем тут время от времени вспоминают. У меня даже какая-то здоровенная PDF-ка про OCaml на англицком лежит, да только времени читать нет. А если бы обзорная статья на русском -- было бы здорово.


ГА>Может быть, когда нибудь. Пока только делаю первые неуклюжие шаги, рановато статьи писать. Это скорее к Quintanar'у или Gaperton'у, но они отчего-то предпочитают держать нас в неведении .


Может просто у людей времени нет. Это ведь совсем не такое простое занятие. По собственному опыту
Автор: Евгений Охотников
Дата: 23.05.05
знаю.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: офтопить так по-крупному
От: Глеб Алексеев  
Дата: 03.11.05 13:16
Оценка:
Здравствуйте, eao197, Вы писали:

E>Может просто у людей времени нет. Это ведь совсем не такое простое занятие. По собственному опыту
Автор: Евгений Охотников
Дата: 23.05.05
знаю.

Т.к. я еще по совместительству немножечко аспирант заочной формы обучения, то я в курсе . Оттого и не берусь, хотя самому интересно (зубров ФЯ на сайте несколько имеется, а статьи — ни одной, за державу обидно, надо же как-то нести свет в массы ).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: зависимости .cpp от .h. Как?
От: _Winnie Россия C++.freerun
Дата: 03.11.05 13:16
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, _Winnie, Вы писали:


_W>>А во что? Для чего есть тулзы параллельного build? для boost.jam нет чего-нибудь такого?


E>
E>usage: d:\bin\bjam.EXE [ options ] targets...

E>-a      Build all targets, even if they are current.
E>-dx     Set the debug level to x (0-9).
E>-fx     Read x instead of Jambase.
E>-jx     Run up to x shell commands concurrently.
E>-n      Don't actually execute the updating actions.
E>-ox     Write the updating actions to file x.
E>-q      Quit quickly as soon as a target fails.
E>-sx=y   Set variable x=y, overriding environment.
E>-tx     Rebuild x, even if it is up-to-date.
E>-v      Print the version of jam and exit.
E>--x     Option is ignored.
E>


Ничто не понял. А где флаг который запускает на нескольких компьютерах?

_W>>IncredyBuild не предлагать. Почему-то он у нас глючит, и он не работает с MinGW. И стоит, зараза, космических денег.


E>На эту тему: build или make &mdash; какая разница?
Автор: NikUsv
Дата: 17.08.05


Не понял. Я же сказал, IncrediBuild не предлагать. А там советуют именно его.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[5]: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 13:25
Оценка:
Здравствуйте, _Winnie, Вы писали:

E>>
E>>usage: d:\bin\bjam.EXE [ options ] targets...

E>>-a      Build all targets, even if they are current.
E>>-dx     Set the debug level to x (0-9).
E>>-fx     Read x instead of Jambase.
E>>-jx     Run up to x shell commands concurrently.
E>>-n      Don't actually execute the updating actions.
E>>-ox     Write the updating actions to file x.
E>>-q      Quit quickly as soon as a target fails.
E>>-sx=y   Set variable x=y, overriding environment.
E>>-tx     Rebuild x, even if it is up-to-date.
E>>-v      Print the version of jam and exit.
E>>--x     Option is ignored.
E>>


_W>Ничто не понял. А где флаг который запускает на нескольких компьютерах?


Месье, вам нужна параллельная или распределенная компиляция?

_W>>>IncredyBuild не предлагать. Почему-то он у нас глючит, и он не работает с MinGW. И стоит, зараза, космических денег.


E>>На эту тему: build или make &mdash; какая разница?
Автор: NikUsv
Дата: 17.08.05


_W>Не понял. Я же сказал, IncrediBuild не предлагать. А там советуют именно его.


Там еще и distcc упоминают.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: зависимости .cpp от .h. Как?
От: _Winnie Россия C++.freerun
Дата: 03.11.05 14:33
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, _Winnie, Вы писали:

_W>>Ничто не понял. А где флаг который запускает на нескольких компьютерах?
E>Месье, вам нужна параллельная или распределенная компиляция?

Распределенная. Что бы ускорить.
Хмммм. А что такое параллельная?

_W>>Не понял. Я же сказал, IncrediBuild не предлагать. А там советуют именно его.

E>Там еще и distcc упоминают.
Ну, меня насторожило, что его назвали компилятором, а не build-системой. А портировать мегабайты кода с gcc/ms-specific под неизвестный компилятор...
Сейчас ещё раз посмотрю, что это.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[7]: зависимости .cpp от .h. Как?
От: _Winnie Россия C++.freerun
Дата: 03.11.05 14:38
Оценка:
Здравствуйте, _Winnie, Вы писали:
_W>Здравствуйте, eao197, Вы писали:
E>>Здравствуйте, _Winnie, Вы писали:

E>distcc: a fast, free distributed C/C++ compiler

Не под винду
Правильно работающая программа — просто частный случай Undefined Behavior
Re[7]: зависимости .cpp от .h. Как?
От: Глеб Алексеев  
Дата: 03.11.05 14:45
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Распределенная. Что бы ускорить.

Еще попытай счастья здесь
Автор: Gaperton
Дата: 03.10.05
.

Бессовестный PR: люди, читайте форум "Декларативное программирование"! .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: зависимости .cpp от .h. Как?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 03.11.05 14:45
Оценка:
Здравствуйте, _Winnie, Вы писали:

E>>Здравствуйте, _Winnie, Вы писали:

_W>>>Ничто не понял. А где флаг который запускает на нескольких компьютерах?
E>>Месье, вам нужна параллельная или распределенная компиляция?

_W>Распределенная. Что бы ускорить.

_W>Хмммм. А что такое параллельная?

Параллельная, это когда на одной машине несколько исходных файлов одного проекта компилируются одновременно. Если машина многопроцессорная, то это может дать серьезный выигрыш.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.