2015-10-14 18 views
5

C++ 'da bazı oyun geliştirmelerini öğrenmek için reddit.com/r/limeoats adresinden birkaç eğiticiyi takip ediyorum. Ben CMake veya CLion ile deneyimlemedim ve bu yolla Google'a geçiş yapmayı başardım.OSX 10.11'de SDL2_image ile SDL2'yi kullanma (CLion 1.1 içinde CMake 3.3)

OSX'i El Capitan'a (10.11) güncelleyene kadar her şey çalışıyordum. Görünüşe göre artık #include "SDL2/SDL.h"'u kullanamıyorum ama bunun yerine #include "SDL.h"'u kullanmanız gerekiyor. Ardından SDL başlıklarını bulabilir. Sorun Ben de şu derleyici hata olsun #include "SDL_image.h" kullandığınızda geliyor:

/Library/Frameworks/SDL2_image.framework/Headers/SDL_image.h:27:10: 
fatal error: 'SDL2/SDL.h' file not found 
#include <SDL2/SDL.h> 
     ^

benim Çerçeveleri klasöründe başlık dosyasına bakıldığında #include <SDL2/SDL.h> var ama CKağıt yükselttikten sonra nedense SDL.h olarak vermektedir OSX, 10.11.

Güncel üstbilgi yolunu kullanarak SDL uzantılarını nasıl güzel oynayabilirim? Veya CMake'in bana eski SDL2/SDL.h başlık yolunu geri vermesini nasıl sağlayabilirim?

Aşağıda, CMakeLists.txt adresim ve FindSDL2.cmake (hat 50'deki yorumu not alın) ve here'dan FindSDL2_image.cmake aldım.

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>) 

Ve dizin yapısı (eğer yardımcı olur) ...

/Cavestory (root) 
    CMakeLists.txt 
    /bin 
    /cmake 
     FindSDL2.cmake 
     FindSDL2_image.cmake 
    /content 
     /sprites 
      **images** 
    /docs 
    /source 
     /headers 
      **header files** 
     /src 
      **code files** 
+0

Gereksiz olduğu için include_directories ($ {SDL2_INCLUDE_DIR}) include_directories ($ {SDL2_IMAGE_INCLUDE_DIR}) ürününü kaldırmaya çalışın. find_package sizin için yapacak. – MinaKamel

+0

Bir kenara göre, SDL/SDL.h değil 'SDL.h' içermelidir. [Kaynak] (https://wiki.libsdl.org/FAQDevelopment#Do_I_.23include_.3CSDL.h.3E_or_.3CSDL.2FSDL.h.3E.3F). – emlai

+0

@MinaKamel - Bu satırlar kaldırıldı, derleyici ne sdl.h ne de SDL2/sdl.h bulamıyor - ne okuduğuma göre FindSDL.cmake bu değişkenleri ayarlıyor ama include_dizinlerini bunlarla çağırmıyor. – Rob

cevap

2

Ben aptal hissediyorum ... Benim CMakeLists.txt dosyası i aşağıdaki

target_link_libraries(Cavestory ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY}) 
eklemek için gerekli hariç doğrudur yerine

target_link_libraries(Cavestory SDL2 SDL2_image) 

Bu, SDL bağlantı sorununu SDL_image.h adresinden giderir; Ancak, El Capitan'a güncelledikten sonra, artık SDL'yi #include "SDL2/SDL.h" üzerinden kullanamaz ve #include "SDL.h"'u kullanmam gerekir - bu tercih edilirken, bunun neden OSX 10.10 ve OSX 10.11 arasında değiştiğini bilmek isterim.

+0

'target_link_libraries' işlevinin değiştirilmesi, dizinleri dahil etmeyi etkilemez (kaynakların derlenmesi * sonradan gelir *). Muhtemelen, sorun başka bir şeydi. Her halükarda, çözdüğünüze iyi gelir. – Tsyvarev

+0

@Rob Bu iş parçacığının dışında denediğiniz başka bir şey var mı? El Capitan'a geçtikten sonra aynı davranışı gördüm ve bu konuyu başarıya ulaşmadan takip ettim. – JoshBramlett

+0

Ben yapmadım. "#include" SDL/SDL.h yerine #include "SDL.h" ile koduma SDL ekliyorum. "OSX sürümleri arasında neden değişmediğinden emin değilim, bu bana garip geliyor. – Rob