Мультиплатформа включает в себя лучшие практики (QT)

я новичок в этом, вы можете дать мне несколько советов?
Поэтому я хочу сделать простое мультиплатформенное приложение с SDL и QT.

Проблема в следующем:

on windows_  #include <SDL2/SDL_main.h>
on mac_      #include <SDL_main.h>

вызвать на windows все библиотеки в папках внутри «include» папки, на mac внутри / Library / Frameworks
Итак, я хочу знать, как лучше включить make … Мне нужно, чтобы на всех платформах был один вид, или существует лучший опыт? также я не использую cMake для этого.

пример
Mac:

*.Pro file
INCLUDEPATH += /Library/Frameworks/SDL2.framework/Headers
QMAKE_LFLAGS += -F/Library/Frameworks/
LIBS += -framework SDL2

#include <SDL.h>

Окна:

*.Pro file
INCLUDEPATH += C:\SDL2-2.0.1\i686-w64-mingw32\include
LIBS += -L"C:\SDL2-2.0.1\i686-w64-ming32\lib" \
-lmingw32\
-lSDL2main\
-lSDL2

#include <SDL2/SDL2.h>

Так как же лучше сделать main.cpp, чтобы на всех платформах это был один путь или он был что-то вроде пути win32?

1

Решение

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

Вы можете использовать следующие области в файле проекта qmake:

mac: INCLUDEPATH += mac-specific-include-path
unix: INCLUDEPATH += unix-specific-include-path
win32: INCLUDEPATH += win32-specific-include-path

так далее…

Исходный код будет включать заголовочные файлы, как это, затем:

#include <SDL_main.h>

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

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

Конечно, это также имело тот недостаток, что вам нужно переопределить эту логику, если вы переключаетесь на новую систему сборки, такую ​​как cmake или же QBS, но я все равно рекомендую решить эти проблемы на уровне buildsystem, потому что хороший исходный код важен.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]