我正在跟随redid.com/r/limeoats的几个教程来学习c++中的一些游戏开发。我对CMake或CLion没有经验,并且已经设法谷歌我的方式到目前为止。
在我将OSX更新到El Capitan (10.11)之前,一切都在进行中。看来我不能再使用#include "SDL2/SDL.h"
了,而是需要使用#include "SDL.h"
,然后它才能找到SDL。当我也使用#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>
^
查看我的框架文件夹中的头文件,它有#include <SDL2/SDL.h>
,但是CMake在将OSX升级到10.11之后出于某种原因将它作为SDL.h提供。
如何让SDL扩展更好地使用更新的头路径?或者如何让CMake返回旧的SDL2/SDL.h头路径?
下面是我的CMakeLists.txt和FindSDL2.cmake (请注意第50行的注释)和来自这里的FindSDL2_image.cmake。
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**
发布于 2015-10-15 02:54:34
我觉得很蠢..。我的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"
--虽然这是首选的,但我想知道为什么/如何在OSX10.10和OSX10.11之间改变。
https://stackoverflow.com/questions/33135856
复制相似问题