在QtCreator中链接SDL2

Linking SDL2 in QtCreator

本文关键字:SDL2 链接 QtCreator      更新时间:2023-10-16

所以我想使用Qt作为我的SDL应用程序的编辑器。当我试图在Qt中创建一个空白项目并链接库时,它只是找不到SDL2/SDL.h。这是我的。pro文件里面的内容:

mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2
INCLUDEPATH += "$$PWD/../Control Libraries/SDL2.framework/Versions/A/Headers"

mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2_mixer
INCLUDEPATH += "$$PWD/../Control Libraries/SDL2_mixer.framework/Versions/A/Headers"

mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2_ttf
INCLUDEPATH += "$$PWD/../Control Libraries/SDL2_ttf.framework/Versions/A/Headers"

我找不到任何人张贴如何得到这个工作,但我知道必须有一些方法。它的工作在Xcode与一键,所以我只是做错了什么?谢谢。

编辑:

下面是错误信息:

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -mmacosx-version-min=10.6 -Wall -W -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../Qt/5.3/clang_64/mkspecs/macx-clang -I../SpudEngineEditor -I../Control Libraries/SDL2.framework/Headers -I../Control Libraries/SDL2_mixer.framework/Headers -I../Control Libraries/SDL2_ttf.framework/Headers -I../../../Qt/5.3/clang_64/lib/QtWidgets.framework/Versions/5/Headers -I../../../Qt/5.3/clang_64/lib/QtGui.framework/Versions/5/Headers -I../../../Qt/5.3/clang_64/lib/QtCore.framework/Versions/5/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I. -F/Users/Logan/Qt/5.3/clang_64/lib -o Camera.o ../SpudEngineEditor/Camera.cpp
In file included from ../SpudEngineEditor/Camera.cpp:9:
In file included from ../SpudEngineEditor/Camera.h:13:
../SpudEngineEditor/CoreEngine.h:14:9: warning: unknown pragma ignored [-Wunknown-pragmas]
#pragma comment (lib, "glu32.lib")
        ^
In file included from ../SpudEngineEditor/Camera.cpp:9:
In file included from ../SpudEngineEditor/Camera.h:13:
In file included from ../SpudEngineEditor/CoreEngine.h:34:
../Control Libraries/SDL2_ttf.framework/Headers/SDL_ttf.h:30:10: fatal error: 'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>
编辑:我已经得到了它,所以我可以包括,但不是,这是一个问题,因为SDL混频器和SDL rtf都使用

当路径中有空格时,应该使用双引号,例如:

INCLUDEPATH += "$$PWD/../Control Libraries/SDL2.framework/Versions/A/Headers"

除非您希望它们是单独的参数,例如:

mac: LIBS += "-F$$PWD/../Control Libraries/" -framework SDL2_mixer

问题编辑后:所以你有#include <SDL2/SDl.h>。好像大小写不对,应该是

#include <SDL2/SDL.h>

编译器清楚错误:

../SpudEngineEditor/main.cpp:3:10: fatal error: 'SDL2/SDl.h' file not found

你应该做的是替换这一行:

#include <SDL2/SDl.h>

:

#include <SDL2/SDL.h>
//               ^, yes uppercase.
此外,对于带有空白的路径,您应该使用相应的quote qmake函数,例如为此目的而建立的,该函数也可以在其中使用双引号。在所有情况下,双引号也可以工作,但我个人更喜欢建立一个花哨的函数。: -)

我还会建立一个辅助变量,如果我是你不重复相同的路径几次。

此外,我会写一个qmake函数,虽然这对于内联调用来说是不必要的,但它使用了真正的qmake功能,for循环,因为你在重复同样的事情。因此,我会这样写:

setSDLPaths() {
    CONTROL_LIBRARIES_PATH = $$quote($$PWD/../Control Libraries/)
    LIST = SDL2 SDL2_ttf SDL2_mixer
    for(item, LIST) {
        mac: LIBS += -F$$CONTROL_LIBRARIES_PATH -framework $$item
        INCLUDEPATH += $$CONTROL_LIBRARIES_PATH/$${item}.framework/Versions/A/Headers
    }
}

,这将大大简化你的代码,基本上是一行:

$$setSDLPaths()