2015-10-14 16 views
5

私はreddit.com/r/limeoatsのチュートリアルのいくつかを読んで、C++のゲーム開発について学んでいます。私はCMakeやCLionで経験していないし、これまで私のやり方でGoogleを管理してきた。OSX 10.11でSDL2_imageでSDL2を使用する(Clake 1.1のCMake 3.3)

OSXをEl Capitan(10.11)にアップデートするまで、私はすべてのことをやっていました。私はもはや#include "SDL2/SDL.h"を使用することはできませんが、代わりに#include "SDL.h"を使用する必要があるようです。それから、SDLヘッダーを見つけることができます。私のフレームワークフォルダ内のヘッダファイルを見ると、それは#include <SDL2/SDL.h>を持っていますが、CMakeのは、アップグレード後に何らかの理由でSDL.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 "SDL_image.h"を使用する場合の問題は、私は、次のコンパイラエラーを取得していますOSXから10.11へ。

更新されたヘッダパスでniceを再生するにはどうすればよいですか?それとも、私は古いSDL2/SDL.hヘッダパスをCMakeに返すのですか?

以下は私のCMakeLists.txtです。FindSDL2.cmake(50行目のコメントに注意してください)とFindSDL2_image.cmakeを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** 
+0

include_directories($ {SDL2_INCLUDE_DIR}) include_dir($ {SDL2_IMAGE_INCLUDE_DIR})は冗長であるため、これを削除してください。 find_packageはあなたのためにそれを行います。 – MinaKamel

+0

さて、SDL/SDL.hではなく 'SDL.h'をインクルードする必要があります。 [ソース](https://wiki.libsdl.org/FAQDevelopment#Do_I_.23include_.3CSDL.h.3E_or_3CSDL.2FSDL.h.3E.3F)。 – emlai

+0

@MinaKamel - これらの行を削除しても、コンパイラはsdl.hやSDL2/sdl.hを見つけることができません - FindSDL.cmakeはこれらの変数を設定していますが、include_directoriesを呼び出すことはありません。 – Rob

答えて

2

私は愚かな感じ私は、次の

target_link_libraries(Cavestory ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY}) 
を追加する必要を除いて...私のCMakeLists.txtファイルが正しいですか代わりの

target_link_libraries(Cavestory SDL2 SDL2_image) 

これは、SDL_image.hからのSDLリンクの問題を修正しました。しかし、El Capitanにアップデートした後は、#include "SDL2/SDL.h"でSDLを参照することができなくなりました。#include "SDL.h"を使用する必要があります。これが望ましいですが、OSX 10.10とOSX 10.11の違いはどうですか?

+0

'target_link_libraries'を変更しても、インクルードディレクトリには影響しません(リンク元は*ソースのコンパイル後です)。多分問題は何かにあったのかもしれない。いずれにせよ、あなたがそれを解決したことは良いことです。 – Tsyvarev

+0

@Robこのスレッドの外に試したことがありますか?私はエルキャピタンにアップグレードした後も同じような動作を見て、このスレッドを成功させました。 – JoshBramlett

+0

私はしませんでした。私は#include "SDL/SDL.h"の代わりに '#include" SDL.h ""を使って自分のコードにSDLを組み込みます。なぜなら、それがなぜOSXのバージョン間で変わったのか分かりません。 – Rob

関連する問題