LINUX.ORG.RU
ФорумTalks

Кроссплатформенность.

 


0

1

Форкнул кое какой проект, и вот что я подумал глядя на код. Программа (нехочу ее упоминать,да и это неважно впринципе, потому что таких - много) в исходниках имеет очень много условно выполняемого кода, под Free/OpenBSD, Solaris, Windows, Mac(2 версии и одна универсальная), IRIX и может быть что-то еще(HP UX точно). Пришел к выводу, что чтобы понять как там все устроено, нужно выпилить все эти мокрые писички, оставить один вариант сборки. Кода уменьшится, он станет нагляднее, проще. Дальше с ним работать - приятнее. Как вы относитесь к таким вешам.



Последнее исправление: nionio35 (всего исправлений: 1)

//Определение путей констант, в соответствии с системой
#if defined(Q_WS_WIN)

    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()

#elif defined(Q_WS_X11)

    #define PATH_SHARE_DOC "/usr/share/doc/klest-crossword-1.2.3"
    #define PATH_SHARE_APP "/usr/share/klest-crossword-1.2.3"

#elif defined(Q_WS_MAC)

    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()

#endif

Нормально. Ты загляни в код библиотки Qt и тебя вывернет наизнанку 4 раза и зелёный будешь неделю ходить.

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 3)
Ответ на: комментарий от xwicked

а еще и cygwin, mingw, msvc только под одну платформу. ну эжто графические штуки, там как бы в этом смысл … конечно тошнит. от плюсов вообще тошнит просто так.

nionio35
() автор топика
Последнее исправление: nionio35 (всего исправлений: 1)
Ответ на: комментарий от xwicked

и он же если defined(Q_WS_X11) может быть «/usr/local/share/*» как минимум. это вообще нужно в систему сборки куда-нить по идее…

nionio35
() автор топика
Ответ на: комментарий от nionio35

ак минимум. это вообще нужно в систему сборки куда-нить по идее…

Это просто как пример. У меня наколенная поделка и никакой системы сборки я не использую, поэтому и код захаркожен.

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от xwicked

понятно. в целом - опять тупняк, а не блог. начал выпиливать все это из исходников. это сходу так ~20% кода из ifndef-define-endif =/. а сколько ошибок на выпил. и сколько трудов людей.

nionio35
() автор топика

Free/OpenBSD
IRIX
HP UX

Для переносимости есть POSIX.

Meyer ★★★★★
()

Как вы относитесь к таким вешам.

К каким?

К «выпилить, оставить один вариант» — плохо.

К кроссплатформенности — хорошо.

hobbit ★★★★★
()

Пришел к выводу, что чтобы понять как там все устроено, нужно выпилить все эти мокрые писички,

Что бы, что-то выпилить, надо понимать «это что-то», рекурсия однако.

anc ★★★★★
()
Ответ на: комментарий от DrBrown

То есть в одном случае PATH_SHARE_APP это char*, а в остальных QString. Выглядит как говнокод.

А что лучше, говнокод на C++ или отлаженный чёткий код на Python? Результат всё равно будет говняный...

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)

много условно выполняемого кода, под Free/OpenBSD, Solaris, Windows, Mac(2 версии и одна универсальная), IRIX и может быть что-то еще(HP UX точно)

Условно конпеляемого, наверное

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

либо проект докуметирован и это не проблема, либо... нафиг его понимать :)

Кода уменьшится, он станет нагляднее, проще. Дальше с ним работать - приятнее.

Или нет, не станет.

Как вы относитесь к таким вешам.

не читали, но суждаем, конечно. Потом ты пройдешь по всем граблям по которым за тебя уже прошли, т.к. очевидно, проект перестанет быть кроссплатформенным и где-то ты прибьешь его гвоздями к основной системе :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

только если буду снова в кроссплатформу. а мне она не нужна, впринципе. есть основная ветка, там кроссплатформа, у меня только одна платформа, проще код, проще сборка.

nionio35
() автор топика

Mac(2 версии и одна универсальная)

Универсальных нет. Это fat binary (в одном файле 2 бинарника под обе архитектуры).

generaldynamix
()
Ответ на: комментарий от nionio35

только если буду снова в кроссплатформу. а мне она не нужна

Ну эт пока :)

у меня только одна платформа, проще код, проще сборка

Если основной код «систем-агностик» это в принципе не проблема. Если «проще» — это когда весь код системоспецифичен, даже если платформа одна, — то код сам по себе обычно превращается во «врайтонли», т.к. воздерживаться от прибивания гвоздями к системо-специфичным «фишкам» становится проблематично.

slackwarrior ★★★★★
()
Ответ на: комментарий от xwicked

Лучше объявить функцию

QString getShareDir()

И сделать разную реализацию для разных платформ, да еще и в разных файлах. Типа

app-dirs-linux.cpp
app-dirs-win.cpp
app-dirs-mac.cpp
DrBrown
()
Ответ на: комментарий от slackwarrior

он итак врайтонли) да и еще с кучей всякой дичи для всех видов всего. в том то и дело.

nionio35
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)