Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.
Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
Правильно работающая программа — просто частный случай Undefined Behavior
Здравствуйте, _Winnie, Вы писали:
_W>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.
_W>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
Здравствуйте, _Winnie, Вы писали:
_W>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.
Это даже на Ruby очень быстро работает. Все упирается в скорость чтения с диска.
_W>Как самостоятельно автоматически строить зависимости?
Могу кодом на Ruby поделиться, если хочешь. Он не сильно замороченный, даже комментарии не обрабатывает А можешь и сам на C++ написать. Хоть вручную файл просматривать, хоть через regex.
_W> Нужно для велосипедного make, генерирующегося из vcproj.
Нашего полку прибывает
Может лучше vcproj преобразовывать в какой-то уже существующий формат?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, _Winnie, Вы писали:
_W>>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго.
_W>>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
СМ>почему долго?
Ну, представь себе проектик из 600 .cpp файлов. Каждый из них надо проверить, и из каждого открыть еще сотню-другую .h файлов(в том числе из стандартных), и не тупо проверить даты модификации, а пройтись препроцессором. Студия с этим справляется за секунду.
Правильно работающая программа — просто частный случай Undefined Behavior
Здравствуйте, _Winnie, Вы писали:
_W>>>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
СМ>>почему долго?
_W>Ну, представь себе проектик из 600 .cpp файлов. Каждый из них надо проверить, и из каждого открыть еще сотню-другую .h файлов(в том числе из стандартных), и не тупо проверить даты модификации, а пройтись препроцессором. Студия с этим справляется за секунду.
у нас это делается приблизительно так.
при первой компиляции компилер выдает среде разработки список зависимостей (да и не только при первой). они учитываются в дереве проекта. все.
Здравствуйте, 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
Здравствуйте, _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++.
Здравствуйте, _Winnie, Вы писали:
_W>Как студия умудряется их разруливать? Неужели она препроцессирует каждый .cpp, что бы найти, от каких файлов он зависит? Но это бы работало слишком долго. _W>Как самостоятельно автоматически строить зависимости? Нужно для велосипедного make, генерирующегося из vcproj.
У cl есть ключик /showIncludes. Правда, придется как-то отличать стандартные файлы от файлов проекта.
А g++ вроде тоже должен быть аналогичный ключик. Насколько я знаю (а в сборке проектов без студии — я еще тот ламер), это обычный подход. Даже для ocaml есть утилита ocamldep, которая генерит зависимости в виде
filename.cmo : filename.ml (cmo -объектник, ml — исходник).
а в конце мэйкфайла вставляешь include .depend и все.
Здравствуйте, _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. И стоит, зараза, космических денег.
Здравствуйте, Глеб Алексеев, Вы писали:
ГА> Даже для ocaml есть утилита ocamldep, которая генерит зависимости в виде ГА>filename.cmo : filename.ml (cmo -объектник, ml — исходник).
Вот здесь глупость сморозил, ocamldep именно зависимости между модулями разгребает.
(Доктор, я разговариваю сам с собой на тему ОКамл в форуме по С/С++, что мне делать?)
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>(Доктор, я разговариваю сам с собой на тему ОКамл в форуме по С/С++, что мне делать?)
Напиши на RSDN статью про OCaml. А то о нем тут время от времени вспоминают. У меня даже какая-то здоровенная PDF-ка про OCaml на англицком лежит, да только времени читать нет. А если бы обзорная статья на русском -- было бы здорово.
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Напиши на RSDN статью про OCaml. А то о нем тут время от времени вспоминают. У меня даже какая-то здоровенная PDF-ка про OCaml на англицком лежит, да только времени читать нет. А если бы обзорная статья на русском -- было бы здорово.
Может быть, когда нибудь. Пока только делаю первые неуклюжие шаги, рановато статьи писать. Это скорее к Quintanar'у или Gaperton'у, но они отчего-то предпочитают держать нас в неведении .
Здравствуйте, Глеб Алексеев, Вы писали:
E>>Напиши на RSDN статью про OCaml. А то о нем тут время от времени вспоминают. У меня даже какая-то здоровенная PDF-ка про OCaml на англицком лежит, да только времени читать нет. А если бы обзорная статья на русском -- было бы здорово.
ГА>Может быть, когда нибудь. Пока только делаю первые неуклюжие шаги, рановато статьи писать. Это скорее к Quintanar'у или Gaperton'у, но они отчего-то предпочитают держать нас в неведении .
Может просто у людей времени нет. Это ведь совсем не такое простое занятие. По собственному опыту
знаю.
Т.к. я еще по совместительству немножечко аспирант заочной формы обучения, то я в курсе . Оттого и не берусь, хотя самому интересно (зубров ФЯ на сайте несколько имеется, а статьи — ни одной, за державу обидно, надо же как-то нести свет в массы ).
Здравствуйте, 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 — какая разница?
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 — какая разница?
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, _Winnie, Вы писали: _W>>Ничто не понял. А где флаг который запускает на нескольких компьютерах? E>Месье, вам нужна параллельная или распределенная компиляция?
Распределенная. Что бы ускорить.
Хмммм. А что такое параллельная?
_W>>Не понял. Я же сказал, IncrediBuild не предлагать. А там советуют именно его. E>Там еще и distcc упоминают.
Ну, меня насторожило, что его назвали компилятором, а не build-системой. А портировать мегабайты кода с gcc/ms-specific под неизвестный компилятор...
Сейчас ещё раз посмотрю, что это.
Правильно работающая программа — просто частный случай Undefined Behavior
Здравствуйте, _Winnie, Вы писали:
E>>Здравствуйте, _Winnie, Вы писали: _W>>>Ничто не понял. А где флаг который запускает на нескольких компьютерах? E>>Месье, вам нужна параллельная или распределенная компиляция?
_W>Распределенная. Что бы ускорить. _W>Хмммм. А что такое параллельная?
Параллельная, это когда на одной машине несколько исходных файлов одного проекта компилируются одновременно. Если машина многопроцессорная, то это может дать серьезный выигрыш.
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.