3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Компиляция проекта под разные версии., Как упростить?
ECXIMER
сообщение 27/11/2013, 12:58
Сообщение #1


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



Скачал VS2013
Работать в нём одно удовольствие.
Так вот, как теперь, малыми средствами компилить проект из 2013студии и для младших неюникод версий макса?
Надоело менять сто500 раз в разных студиях в разных проектах кучи строк кода...

Вот давайте, например, разберем 2 версии - проект для Max2013, и нужно его же скомпилить для Max2012.
Что я пытался делать:

1. Меняю платформу на 90
2. Создаю новую конфигурацию и в ней все пути к либам и хедерам от своей SDK
... тут тупик, т.к. уже при парсинге новых либ и инклюдов в проекте куча подчеркиваний, т.к. не юникод....

Как заставить компилить без переписывания кода?

Сообщение отредактировал ECXIMER - 27/11/2013, 13:55
Go to the top of the page
 
+Quote Post
Pancir
сообщение 27/11/2013, 15:44
Сообщение #2


Избранный :)
Иконка группы

Группа: Участник
Сообщений: 5 052
Регистрация: 20/01/2004
Из: Химки м/о
Пользователь №: 4 253



У меня сделаны одинаковые проекты от 9-го макса до 2014, отличия только к путям SDK и настройка на юникод для версий после 2012. Потом запускаются через бач.
Так же у меня сделано много всяких ухищрений на автоматизацю всех этих конвертов, все сразу и не припомнить... К тому-же еще зависит как и что ты используешь, я часто использую STL стринги, и мои плагины работают с внешними библиотеками.
Так же стоит по возможности использовать максовские строки всякие MCHAR TSTR и т.д они сразу "задефайнены" на юникод.


Один из вариантов (не самый лучший для использования в функциях, классах и т.д но часто достаточно эффективный )))

#ifdef _UNICODE
// some code
#else
// some code
#endif

можно делать перегруженные функции и функции пустышки например

#ifdef _UNICODE
inline TSTR toTSTR(TSTR str) {return str;}
#else
inline TSTR toTSTR(CStr str) {return str.data();}
#endif
Это псевдокод, идея проста, если текущий проект под юникод то функция toTSTR принимает TSTR , если не юникод то CStr , но отдает всегда TSTR


Что касается твоего примера, лучше сразу на проблеме спрашивай...
Например я не помню где точно, но есть функция которая до версии 2013 макса возвращала указатель, а в версиях начиная с 2013 возвращает ссылку, то там нужно через #ifdef _UNICODE

Сообщение отредактировал Pancir - 27/11/2013, 15:45
Go to the top of the page
 
+Quote Post
ECXIMER
сообщение 27/11/2013, 16:31
Сообщение #3


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



спасибо, я подозревал, что через ifdef и делается, но тлела надежда, что это может где в каких пропертях указать и готово smile.gif
То есть у тебя один проект(солюшн) и в нем уже ты кодишь сразу для конвертации в неюникод, далее в проекте куча конфигов для разных версий и компилится бачем?
я правильно понял.
то есть мне нужно просто все свои стринги описать макросами...
а в будущем вообще отказываться от максов до 2012 версии, включительно...
Go to the top of the page
 
+Quote Post
Pancir
сообщение 27/11/2013, 17:03
Сообщение #4


Избранный :)
Иконка группы

Группа: Участник
Сообщений: 5 052
Регистрация: 20/01/2004
Из: Химки м/о
Пользователь №: 4 253



Ничего не понял про солюшены и проекты...))
Если кратко и в лоб (про VS), то есть проект с настройками компиляций (может быть сразу несколько настроек, debug, release, release_max_2009 ит.д ты сам все это настраиваешь) и есть солюшен, солюшен может содержать в себе несколько проектов. Про солюшен в текущем разговоре забываем сразу... нас интересует только проект .vcxproj.
Так вот проект у меня содержит настройки для компиляций от 9 до 2014 максов.... Делал просто, настраивал для 9-го макса все как надо, остальные проекты были копией настроек от 9-го, затем менял пути к sdk, имя выходного файла и настройку юникода.


Что касается кодинга, то да, я пишу сразу код с учетом того, что он должен работать как с ascii так и с wide, а иначе как? или я не понял вопроса?

QUOTE
то есть мне нужно просто все свои стринги описать макросами...

И не только стринги ).Только там где это действительно необходимо, и желательно придумать универсальное решение, а не тупо в каждом месте "макросить".

QUOTE
а в будущем вообще отказываться от максов до 2012 версии, включительно...

Хозяин барин ))

Сообщение отредактировал Pancir - 27/11/2013, 17:05
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Fast ReplyReply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 17/10/2019 - 21:29