Visual Studio .sln/.vcproj generator?

По многочисленным просьбам трудящихся, я поставляю вместе с LibRaw еще и .sln/.vcproj файлы для MS Visual Studio.

Генерирую я их с помощью Qmake и все более-менее работает, но:

  • Иногда (когда Юпитер в Рыбах?) в sln-файле вместо относительных путей оказываются полные, приходится ручками чистить.
  • Проекты содержат AdditionalIncludeDirectories указывающие (абсолютным путем) на mkspecs от моего Qmake.
  • Можно сгенерировать проект для 32-бит, вроде бы можно (хотя не пробовал) для 64 бит, а вот под две платформы сразу - не умеет.
  • Была еще проблема с зависимостями (exe - dll), ибо зависимости ловятся искуственным интеллектом, но вроде я научился добиваться от него счастья.
  • Достали win32:/unix: конструкции в .pro-файлах, блин.
Короче, неаккуратненько, неровно висят.

Попробовал CMake и счастья еще меньше, проекты ALL_BUILD и ZERO_CHECK раздражают мое эстетическое чувство. При этом проблема абсолютных путей не решена, а дальше я копать не стал и CMake снес.

Что я упустил? Какой еще есть варез, который нагенерирует мне sln/vcproj из простых текстовых файлов?

Comments

Других нет, cmake рулез, но со слезами конечно. Его надо тщательно готовить и внимательно читать доку. Софтвер написан с точки зрения дизайна и архитектуры чудовищно, там _всё_ ad hoc. Доки не хватает, приходится читать сорсы и тут-то и накрывает.

А там можно не читая сорцов собственно решить задачу: нагенерировать проектных файлов, чистых как слеза ребенка?

Я в том смысле спрашиваю, что "для себя" - насрать и на лишние проекты и на то, что оно там нагадит в CMakeFiles/, а вот включать это безобразие в поставку вареза как-то неудобно перед публикой

Абсолютные пути я почти везде там победил, они остались либо там где я их ожидаю, либо в безопасных местах, типа текстовых строк. Но не везде, все равно.
То есть ответ "нет". Возможно получится допилить и до полного совершенства, я просто не ставил такой задачи. А чем не вариант класть CMakeFiles.txt и желающим MSVC/XCode/Eclipse рекомендовать поставить CMake?

Да все вариант.

Но я минимизирую время на саппорт. Те люди, которым нужен .vcproj, но они не могут сделать его самостоятельно из пяти исходников и одного дефайна, боюсь что и от Cmake тоже могут испортиться.

Ну тогда CMake не вариант и вообще ничего не вариант, кроме своего какого-нибудь самопильного генератора.

Я еще делал такое - брал тщательно вылизанную выдачу CMake и долизывал ее перлом, это ж XML. Но потом все же предпочел закопать стюардессу и жениться на живой женщине.
Заниматься ЭТИМ в нашем с тобой возрасте уже, имхо, неприлично.

Единственная серьезная претензия к Qmake - это отсутствие 32/64bit в одном флаконе.
Но стандартный путь "New configuration -> x64 -> based on Win32" решает проблему тех, кому нужно 64 бита. А кому нужно оба сразу - исчезающе мало.

> А кому нужно оба сразу - исчезающе мало.

И такие, как правило, вполне способны сами скачать Qt и сгенерить проекты как и нужно ;)

Но я минимизирую время на саппорт.

Ну так у вас будет только CMakeLists.txt вместо отдельных мэйкфайлов и готовых проектов для студии - всё чисто и аккуратно. + в перспективе CPack (ну и CTest,CDash, но это мелочи).

Те люди, которым нужен .vcproj, но они не могут сделать его самостоятельно из пяти исходников и одного дефайна, боюсь что и от Cmake тоже могут испортиться.
А зачем таким людям вообще тогда .vcproj, если не могут в cmake-gui сделать пару кликов?
Если люди без готового .vcproj вообще ничего не могут сделать - слепите отдельный vs проект, который при сборке/запуске выдаёт инструкцию как же использовать cmake-gui.

Э, ну в cmake-gui и я не могу сделать пару кликов - посмотрел, ничего не понял, закрыл....

1. "Browse source" - это та папка где лежит CMakeLists.txt
2. "Browse Build" - папка в которой будут лежать сгененрированные файлы проекта и билдится бинарники(можно директорию для бинарников менять)
3. Configure жать до тех пор, пока не станет активной "Generate"
4. Generate

Да-да. Интуитивно понятный интерфейс, понимаю.

А зачем оно вообще?

Что зачем? Зачем CMake? Или cmake-gui?

я конечно видел что cmake всюду суёт абсолютные пути - но мне это как-то фиолетово, ведь подразумевается что cmake будет запускаться у каждого разработчика для генерации файлов..

Есть небольшой workaround для абсолютных путей - сделайте простой .cmd/.bat файл в папке с проектом с содержанием: "subst T: ."
и генерируйте файлы проекта уже относительно T: ... пользователям остаётся только запустить этот скрипт и открывать файлы проекта.

Да, родной способ использования Сmake он, наверное, хороший.

А как генератор .vcproj - мне не понравилось после трех минут использования, дальше копать не стал.

У меня сложная сборка, с кучей компонент и достаточным количеством зависимостей, но такого ада нет. Аркеной либо а) хочет просто поныть какой он умный, а все тупые либо б) не умеет готовить. Либо all of the above.

Ну так описанный адъ взялся оттого, что в evolution28 и gnutls2 не следовали правилам покладания файлов .pc

И, как следует из комментариев, авторы сами себе устроили такую жизнь. Может им так легче.

а зачем "ви'жувал студию", если есть QT ?

Так написано же: "по многочисленным просьбам трудящихся".

Это я заметил и прочёл.
Но, грешным делом, подумал, что тут могут быть какие-то рациональные обоснования (типа, "оно и у девелоперов собирается так и только так" или "генерится лучший код и это критично").

для прочих же...
Если кто хочет "пощупать" либу для своих задач - вполне хватит бинарников и исходников (в кач-ве доки)
Если кто хочет поковырять саму либу, то пусть уже в "кьюте" и ковыряет (своеобразный "порог вхождения" дабы отсеять "праздных зевак").

но хозяин - барин, разумеется :-)

Проблема именно с "пощупать" - в винде дохрена версий рантаймов (от разных VC, с разными вариантами multi-single thread/static-dynamic/debug-release).

Давать все варианты .DLL, как это делает Boost(pro), по 8 версий на каждую версию VC - это я удавлюсь собирать. Пусть лучше сами.

Так может ручками один раз на релиз? Или там столько изменений в каждом релизе, что никак?

Хоть это и не надо делать каждый раз "на релиз", но даже сделать один раз аккуратно - это чудовищный геморой, мышью обвозиться.

При том, что wizard тамошний делает по отдельному каталогу на проект, что красоты не добавляет.

Это из опыта пары больших прожектов (пара-тройка млн строк). Именно так и поступили.

Хочу уточнения: это все, в результате, публичное или для внутреннего употребления?

Для внутреннего - мы тоже так делаем. Но девелоперское окружение известно какое и если что, можно моск вправить разработчику на место.

Для публики у меня задача: минимизация возникающих вопросов от совершенно диких персонажей.

Внутреннее, но как бы сказать. Для сотни человек, должно было быть "легко распространяемо", а не так, чтобы один подкрутил, второй подкрутил, т.п. Чекаут, открыл, сбилдил.

> Для публики у меня задача: минимизация возникающих вопросов от совершенно диких персонажей.

IMHO, mission impossible

Для публики у меня задача: минимизация возникающих вопросов от совершенно диких персонажей.

Ну вот мы как для внутренней сборки вареза используем CMake, так и для примеров как работать с ним (т.е. то что видят заказчики) - и никто не жжужит. В help'е у нас есть 6 страниц с подробными скриншотами, как использовать cmake-gui.