VD>Есть такая проблема. Что-то не так в файлах проекта. Просто оно не особо напрягало до сих пор, так что никто серьезно ею не занимался.
Напрягает еще как! Я написал утилиту на Nemerle, которая по текствовому файлу генерит некоторый исходник, который компилируется и линкуется в некий С++ проект. Так вот в связи с этой проблемой: перекомпилируется утилита -> перегенерируется исходник -> пересобирается С++ проект. Это очень и очень напрягает. Пришлось разорвать цепочку зависимостей и потерять в автоматизации.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Напрягает еще как! Я написал утилиту на Nemerle, которая по текствовому файлу генерит некоторый исходник, который компилируется и линкуется в некий С++ проект. Так вот в связи с этой проблемой: перекомпилируется утилита -> перегенерируется исходник -> пересобирается С++ проект. Это очень и очень напрягает. Пришлось разорвать цепочку зависимостей и потерять в автоматизации.
Ясно. Опять С++ .
Ладно, попробую поглядеть на следующей неделе.
В принципе, если есть опыт с MSBuild, то можешь и сам попробовать. Там дело именно в файлах проекта, так как через MSBuild проекты тоже каждый раз перекомпилируются.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Ясно. Опять С++ .
Он, родимый. Пока без него никак. Скорость зубодробительная нужна. Исходники для того и генерятся — для зубодробительной скорости.
VD>Ладно, попробую поглядеть на следующей неделе.
Заранее спасибо.
VD>В принципе, если есть опыт с MSBuild, то можешь и сам попробовать. Там дело именно в файлах проекта, так как через MSBuild проекты тоже каждый раз перекомпилируются.
Я хочу приступить работать над интеграцией или компилятором. Внести "личный вклад в общее дело". Но есть пока ряд проблем, которые для этого нужно решить. Недельки через 2, надеюсь, начну.
KK>Я хочу приступить работать над интеграцией или компилятором. Внести "личный вклад в общее дело". Но есть пока ряд проблем, которые для этого нужно решить. Недельки через 2, надеюсь, начну.
Хм. Это наверно сделано чтобы проект пересобирался при изменениях зависимых проектах. Хотя... где бы доки по этому делу найти?
АП>После этого всё пересобирается только при изменениях.
Попробую когда оживет SVN.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Хм. Это наверно сделано чтобы проект пересобирался при изменениях зависимых проектах. Хотя... где бы доки по этому делу найти?
Похоже, что в MSBuildAllProjects попадает сам собираемый проект и все его targets-ы. При изменении этих файлов нужно перекомпилировать проект. Так что скорее всего MSBuildAllProjects лучше не выкидывать.
С ним пересборка проектов осуществляется каждый раз?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Хм. Это наверно сделано чтобы проект пересобирался при изменениях зависимых проектах. Хотя... где бы доки по этому делу найти?
Гуглом нашел например это. Похоже, MSBuildAllProjects — это список всех targets-файлов, о которых знает мсбилд. Но не факт. А зависимые проекты лежат в переменной ReferencePath, и она в инпутах тоже есть.
В принципе, присутствие списка таргетов в инпутах не должно бы вызывать постоянные ребилды, но почему-то вызывает.
Здравствуйте, Алексей П, Вы писали:
АП>Гуглом нашел например это. Похоже, MSBuildAllProjects — это список всех targets-файлов, о которых знает мсбилд. Но не факт. А зависимые проекты лежат в переменной ReferencePath, и она в инпутах тоже есть. АП>В принципе, присутствие списка таргетов в инпутах не должно бы вызывать постоянные ребилды, но почему-то вызывает.
Ага.
Наверно дело в файле Nemerle.MSBuild.targets
Там (как описано в этом блоге) эта переменная переопределяется:
Здравствуйте, VladD2, Вы писали:
VD>Наверно дело в файле Nemerle.MSBuild.targets VD>Там (как описано в этом блоге) эта переменная переопределяется: VD>
Отлично, значит надо не забыть поправить таргет-файл как СВН поднимется.
АП>Только интересно, почему он, не найдя входной файл, пересобирает проект?
Дык секция Input как раз и создана для того чтобы отслеживать изменившиеся или отсутствующие файлы. MSBuild же — это аналог (точнее даже замена) make-ую.
По уму при отсутствии таргет-файла нужно вообще сообщать об ошибке и прекращать компиляцию.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
В общем, залил в SVN исправленный таргет-файл. У меня на тестовом проекте вроде бы все работает.
Зачем нужн NonExistentFile я так и не понял. Информации — ноль.
Пока что просто убрал его. Если кто объяснит его предназначение, то можно подумать о его возвращении. С ним же перекомпиляция происходит каждый раз.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Зачем нужн NonExistentFile я так и не понял. Информации — ноль. VD>Пока что просто убрал его. Если кто объяснит его предназначение, то можно подумать о его возвращении. С ним же перекомпиляция происходит каждый раз.
Предположу, чтобы как раз пересобиралось — если включить в выходы заведомо несуществующий файл, они всегда будут out-of-date. Вероятно, это использовалось, когда компилятор часто менялся.
из таргетов. Из-за нее мсбилд выдает предупреждение:
C:\Program Files\Nemerle\Nemerle.MSBuild.targets(197,13): warning MSB4011: There is a circular reference involving the import of file "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets". This file may have been imported more than once, or you may have attempted to import the main project file. All except the first instance of this file will be ignored.
АП>из таргетов. Из-за нее мсбилд выдает предупреждение: АП>
АП>C:\Program Files\Nemerle\Nemerle.MSBuild.targets(197,13): warning MSB4011: There is a circular reference involving the import of file "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets". This file may have been imported more than once, or you may have attempted to import the main project file. All except the first instance of this file will be ignored.
Хм. По уму ее лучше удалить из проектов. Зачем импортировать два таргет-файла, если можно импортировать только один?
В проектах C#-а этого импорта тоже нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.