【问题标题】:Multiplatform include best practice (qt)多平台包括最佳实践 (qt)
【发布时间】:2013-12-31 18:19:31
【问题描述】:

我是新手,你能给我一些建议吗? 所以我想用 SDL 和 qt 制作一个简单的多平台应用程序。

问题是:

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

在 Windows 上导致“include”文件夹内的文件夹中的所有库,在 /Library/Frameworks 内的 mac 上 所以我想知道如何更好地制作包括......我是否需要在所有平台上制作一个类似的视图或存在更好的实践?我也不为此使用cMake。

示例 麦克:

*.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 在所有平台上都是一条路径,或者它存在类似于 if win32 路径的其他路径?

【问题讨论】:

  • 您的源代码应该始终指向同一个头文件,而您的 qmake 文件中的 INCLUDEPATH 应该在两个系统之间有所不同。
  • ok,系统的include路径不同,但是所有系统下如何在头文件中正确写入#include?​​span>
  • 让你的 INCLUDEPATH C:/SDL2-2.0.1/i686-w64-mingw32/include/SDL2/ 然后你就可以#include &lt;SDL2.h&gt;

标签: c++ qt sdl qmake multiplatform


【解决方案1】:

在理想情况下,您应该使用相同的代码,并且构建系统应该让构建系统相关的数据正常工作。

您可以在 qmake 项目文件中使用以下范围:

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

等等……

源代码会包含这样的头文件,那么:

#include <SDL_main.h>

我建议省略模块前缀,因为这可能会隐藏构建系统中的错误。话虽如此,在某些项目中,您需要遵循约定,无论对某人来说哪种看起来更合理。

这将确保如果您将代码移植到另一个平台,您将需要使代码更复杂,您可能作为维护者经常阅读和修改。

当然,这也有一个缺点,如果您切换到新的构建系统,如 cmakeQBS,则需要重新实现此逻辑,但我仍然建议在构建系统层解决这些问题,因为源代码很好很重要。

【讨论】:

  • 好的,我理解正确吗,在 .h 和 .m 中必须始终是一个包含路径,如 #include 无论系统如何?
  • @gronzzz:我个人会使用答案中所写的 SDL.h,但希望 也能工作。
  • @gronzzz:如果您的意思是 SDL.h 与 SDL2.h,恐怕您需要在代码中使用 ifdef。除非,您在 SDL2.h 周围创建一个外部 SDL.h 包装器,其中只有 SDL2.h,没有 SDL.h
  • 嗯,如果你建议使用不带前缀,我不明白为什么?所以例如我有很多库的库文件夹,所以使用它而不需要设置没有自己的文件夹的标题,它有点脏,不是吗?
  • @gronzzz:我不确定我完全理解你的意思,但它并不脏。实际上,由于 SDL 和 SDL2 文件夹名称不同,它甚至会对您有所帮助。
猜你喜欢
  • 2011-04-08
  • 2011-01-20
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2020-10-28
  • 2021-01-29
相关资源
最近更新 更多