I'm following a couple of tutorials from reddit.com/r/limeoats to learn some game development in c++. I'm not experienced with CMake or CLion and have managed to google my way this far.
I had everything working up until I updated OSX to El Capitan (10.11). It seems that I can no longer use #include "SDL2/SDL.h"
but instead need to use #include "SDL.h"
Then it can find the SDL headers. The problem comes in when I also use #include "SDL_image.h"
I get the following compiler error:
/Library/Frameworks/SDL2_image.framework/Headers/SDL_image.h:27:10:
fatal error: 'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>
^
Looking into the header file in my Frameworks folder, it has #include <SDL2/SDL.h>
but CMake is providing it as SDL.h for some reason after upgrading OSX to 10.11.
How do I get the SDL extensions to play nice with the updated header path? Or how do I get CMake to give me the old SDL2/SDL.h header path back?
Below is my CMakeLists.txt and I got the 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>)
And my directory structure (if it helps)...
/Cavestory (root)
CMakeLists.txt
/bin
/cmake
FindSDL2.cmake
FindSDL2_image.cmake
/content
/sprites
**images**
/docs
/source
/headers
**header files**
/src
**code files**
I feel stupid... My CMakeLists.txt file is correct except i needed to add the following
target_link_libraries(Cavestory ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY})
instead of
target_link_libraries(Cavestory SDL2 SDL2_image)
This fixes the SDL linking issue from SDL_image.h; However, after updating to El Capitan, I can no longer reference SDL via #include "SDL2/SDL.h"
and must use #include "SDL.h"
-- while this is preferred, I'd like to know why/how this changed between OSX 10.10 and OSX 10.11.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With