首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在OSX10.11上使用SDL2和SDL2_image (CMake 3.3在CLion 1.1中)

在OSX10.11上使用SDL2和SDL2_image (CMake 3.3在CLion 1.1中)
EN

Stack Overflow用户
提问于 2015-10-14 21:24:58
回答 1查看 5.2K关注 0票数 6

我正在跟随redid.com/r/limeoats的几个教程来学习c++中的一些游戏开发。我对CMake或CLion没有经验,并且已经设法谷歌我的方式到目前为止。

在我将OSX更新到El Capitan (10.11)之前,一切都在进行中。看来我不能再使用#include "SDL2/SDL.h"了,而是需要使用#include "SDL.h",然后它才能找到SDL。当我也使用#include "SDL_image.h"时,问题出现了,我得到了以下编译器错误:

代码语言:javascript
运行
复制
/Library/Frameworks/SDL2_image.framework/Headers/SDL_image.h:27:10:
fatal error: 'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>
         ^

查看我的框架文件夹中的头文件,它有#include <SDL2/SDL.h>,但是CMake在将OSX升级到10.11之后出于某种原因将它作为SDL.h提供。

如何让SDL扩展更好地使用更新的头路径?或者如何让CMake返回旧的SDL2/SDL.h头路径?

下面是我的CMakeLists.txt和FindSDL2.cmake (请注意第50行的注释)和来自这里的FindSDL2_image.cmake。

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.3)
project(Cavestory)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

include_directories(${PROJECT_SOURCE_DIR}/source/headers)

find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED >=2.0.0)

include_directories(${SDL2_INCLUDE_DIR})
include_directories(${SDL2_IMAGE_INCLUDE_DIR})

file(GLOB SOURCE_FILES "source/src/*.cpp")

add_executable(Cavestory ${SOURCE_FILES})

# One thread said this is all I should need to link SDL2
# but cannot get this to work at all
#target_link_libraries(Cavestory SDL2 SDL2_image)

#add_custom_command(TARGET Cavestory POST_BUILD
#        COMMAND ${CMAKE_COMMAND} -E copy_directory
#        ${CMAKE_SOURCE_DIR}/content $<TARGET_FILE_DIR:Cavestory>)

我的目录结构(如果有帮助的话).

代码语言:javascript
运行
复制
/Cavestory (root)
    CMakeLists.txt
    /bin
    /cmake
        FindSDL2.cmake
        FindSDL2_image.cmake
    /content
        /sprites
            **images**
    /docs
    /source
        /headers
           **header files**
        /src
           **code files**
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-15 02:54:34

我觉得很蠢..。我的CMakeLists.txt文件是正确的,但我需要添加以下内容

代码语言:javascript
运行
复制
target_link_libraries(Cavestory ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY})

而不是

代码语言:javascript
运行
复制
target_link_libraries(Cavestory SDL2 SDL2_image)

这解决了来自SDL_image.h的SDL链接问题;但是,在更新到El Capitan之后,我不能再通过#include "SDL2/SDL.h"引用SDL,而必须使用#include "SDL.h" --虽然这是首选的,但我想知道为什么/如何在OSX10.10和OSX10.11之间改变。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33135856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档