Инструменты для мультиплатформенных проектов C++

Я работаю с мультиплатформенным проектом С++, используя Visual Studio 2010, есть общая часть кода для всех платформ, но есть большая часть, посвященная каждой из них, я разделяю их с помощью #if def, но это получается из-за того, что обслуживание кода становится очень сложным, и код загроможден, в дополнение к таким проблемам, как код, который не компилируется с включенными или выключенными некоторыми определениями.

Есть ли какой-либо плагин или инструмент для визуальной студии, который помогает в разработке многоплатформенных проектов, например, скрывает код, связанный с платформой, или компилирует с использованием различных включенных/выключенных #define, проверки типов данных и т. д.

Буду признателен, если у кого-нибудь есть предложение


person Hani    schedule 19.03.2013    source источник
comment
Использование if (kFeatureFoo) вместо #if kFeatureFoo часто может помочь: это означает, что компилятор все еще должен проверить, является ли код допустимым C++, а удаление выполняется только оптимизатором (удаление недостижимого кода — это обычная и надежная оптимизация).   -  person MSalters    schedule 19.03.2013


Ответы (3)


Я не знаю о таком плагине для VS, но поскольку это в основном IDE только для Windows, я сомневаюсь, что они есть. (но я конечно могу ошибаться)

Если вам нужна хорошая кроссплатформенная система сборки, я бы обратил внимание на CMake. Он мощный, простой в использовании и может генерировать файлы сборки практически для любой популярной IDE/инструментальной цепочки (Visual Studio Solutions, Eclipse Projects, MinGW Makefiles, GNU Makefiles и т. д.).

Это упрощает кроссплатформенную разработку крупных проектов!

person Zultar    schedule 19.03.2013
comment
ну, вы получаете мой голос за cMake, но на самом деле это не так уж и просто ;-) - person Najzero; 19.03.2013
comment
Я предполагаю, что это действительно скорее постоянный встречный ветер, но, на мой взгляд, это лучше, чем постоянная буря ручной кросс-платформенной разработки. ;) - person Zultar; 19.03.2013
comment
Я также настоятельно рекомендую CMake. Он отлично работает для нескольких платформ, нескольких ОС и нескольких компиляторов. Я чаще всего использую его с несколькими версиями Visual Studio в 64-битных окнах, однако я также создавал свои приложения для Linux с небольшими изменениями в файле конфигурации CMake. И да, у CMake есть возможность управлять определениями. - person drescherjm; 19.03.2013
comment
Я хотел бы добавить jenkins или hudson jenkins-ci.org поверх CMake в качестве CI-сервера для сборки. Затем разработчики могут работать в среде IDE по своему выбору и просто фиксировать сервер для кросс-сборки. (ну, и он обеспечивает чистый код, поскольку MSVC допускает использование некоторого неприятного несовместимого кода, тогда как GCC дает сбой и налагает штраф на сервер сборки за прерыватель сборки ;-)) - person Najzero; 19.03.2013

Вероятно, вы могли бы исключить большую часть зависимого от платформы кода, если бы переключились на платформу Qt. Вы можете продолжать использовать VS с надстройкой Qt, и, используя абстракции платформы Qt, вы можете ориентироваться на несколько разных платформ с (почти) идентичной базой кода. Вы получаете непревзойденную поддержку платформы и мобильность:

  • Окна
  • Linux (Qt встроен в KDE и будущие выпуски Ubuntu)
  • MacOS
  • BB10 (Qt также родной для BB10)
  • Встроенный Linux
  • Android (в следующем месяце)
  • iOS (тоже в следующем месяце)
  • Джолла
  • Тизен

API-интерфейсы также лучше, IMO - менее уродливые и неуклюжие, более последовательные. Кроме того, QML (разметка в стиле JSON для создания приложений из компонентов C++ с использованием JS для связующего кода и привязки значений) может значительно повысить вашу производительность (до 10 раз без преувеличения). Набор инструментов Qt поддерживает различные наборы (сочетание версий библиотек, компиляторов и платформ) и мультиплатформенную кросс-компиляцию.

person dtech    schedule 19.03.2013

Нет «Инструмента» больше, чем сама визуальная студия. Разделите код на разные проекты; Проект для общего кода и проект для каждой платформы.

Не забудьте:

 1. Add reference to common project in all platform-dependent projects (so common project is compiled before platform project). 
 2. Add common project base to the common include directories of each target project.

введите здесь описание изображения

person Yousf    schedule 19.03.2013