在 OSX 10.11 上将 SDL2 与 SDL2_image 一起使用(CLion 1.1 中的 CMake 3.3)
Using SDL2 with SDL2_image on OSX 10.11 (CMake 3.3 within CLion 1.1)
我正在关注 reddit 上的一些教程。com/r/limeoats 学习一些使用 C++ 进行的游戏开发。我没有使用 CMake 或 CLion 的经验,但到目前为止 google 我已经做到了。
在我将 OSX 更新到 El Capitan (10.11) 之前,我一切正常。看来我不能再使用 #include "SDL2/SDL.h"
而是需要使用 #include "SDL.h"
然后它可以找到 SDL headers。当我还使用 #include "SDL_image.h"
时出现问题,我收到以下编译器错误:
/Library/Frameworks/SDL2_image.framework/Headers/SDL_image.h:27:10:
fatal error: 'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>
^
查看我的 Frameworks 文件夹中的 header 文件,它有 #include <SDL2/SDL.h>
但 CMake 在将 OSX 升级到 10.11 后出于某种原因将其提供为 SDL.h。
如何让 SDL 扩展与更新后的 header 路径兼容?或者我如何让 CMake 给我返回旧的 SDL2/SDL.h header 路径?
下面是我的 CMakeLists.txt 我得到了 FindSDL2.cmake (note the comment on line 50) and FindSDL2_image.cmake from here.
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>)
还有我的目录结构(如果有帮助的话)...
/Cavestory (root)
CMakeLists.txt
/bin
/cmake
FindSDL2.cmake
FindSDL2_image.cmake
/content
/sprites
**images**
/docs
/source
/headers
**header files**
/src
**code files**
我觉得很蠢...我的 CMakeLists.txt 文件是正确的,只是我需要添加以下内容
target_link_libraries(Cavestory ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY})
而不是
target_link_libraries(Cavestory SDL2 SDL2_image)
这修复了 SDL_image.h 中的 SDL 链接问题;然而,在更新到 El Capitan 之后,我不能再通过 #include "SDL2/SDL.h"
引用 SDL,必须使用 #include "SDL.h"
——虽然这是首选,但我想知道 why/how 这在 OSX 10.10 和 OSX 10.11.
我正在关注 reddit 上的一些教程。com/r/limeoats 学习一些使用 C++ 进行的游戏开发。我没有使用 CMake 或 CLion 的经验,但到目前为止 google 我已经做到了。
在我将 OSX 更新到 El Capitan (10.11) 之前,我一切正常。看来我不能再使用 #include "SDL2/SDL.h"
而是需要使用 #include "SDL.h"
然后它可以找到 SDL headers。当我还使用 #include "SDL_image.h"
时出现问题,我收到以下编译器错误:
/Library/Frameworks/SDL2_image.framework/Headers/SDL_image.h:27:10:
fatal error: 'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>
^
查看我的 Frameworks 文件夹中的 header 文件,它有 #include <SDL2/SDL.h>
但 CMake 在将 OSX 升级到 10.11 后出于某种原因将其提供为 SDL.h。
如何让 SDL 扩展与更新后的 header 路径兼容?或者我如何让 CMake 给我返回旧的 SDL2/SDL.h header 路径?
下面是我的 CMakeLists.txt 我得到了 FindSDL2.cmake (note the comment on line 50) and FindSDL2_image.cmake from here.
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>)
还有我的目录结构(如果有帮助的话)...
/Cavestory (root)
CMakeLists.txt
/bin
/cmake
FindSDL2.cmake
FindSDL2_image.cmake
/content
/sprites
**images**
/docs
/source
/headers
**header files**
/src
**code files**
我觉得很蠢...我的 CMakeLists.txt 文件是正确的,只是我需要添加以下内容
target_link_libraries(Cavestory ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY})
而不是
target_link_libraries(Cavestory SDL2 SDL2_image)
这修复了 SDL_image.h 中的 SDL 链接问题;然而,在更新到 El Capitan 之后,我不能再通过 #include "SDL2/SDL.h"
引用 SDL,必须使用 #include "SDL.h"
——虽然这是首选,但我想知道 why/how 这在 OSX 10.10 和 OSX 10.11.