2011-09-25 1 views
1

나는 내 자신의 소스 코드를 준비하기 위해 지금 SFML 샘플을 컴파일하기 위해 CMakeLists.txt를 모으고있다. 지금은 작동하지만 (Mac Makefile, VS nmake, VS solution) 해킹과 같은 느낌입니다.CMakelists.txt는 윈도우와 맥을 작동 시키는데 어리석게 복잡합니다. 더 좋은 방법이 있습니까?

주요 저장소는 https://github.com/iaefai/Spider-Fish/

에 어떤 제안을 환영합니다.

cmake_minimum_required(VERSION 2.8) 

PROJECT(Spider-Fish) 

FIND_PACKAGE(OpenGL REQUIRED) 
FIND_PACKAGE(SFML REQUIRED) 


IF (WIN32) 
    # Windows 

    link_directories(${SFML_INCLUDE_DIR}/../lib) 

    set(RESOURCE_HANDLER ${CMAKE_CURRENT_SOURCE_DIR}/src/windows/resources.cpp) 
# link_directories(${FIND_SFML_LIB_PATHS}) 

ELSEIF(APPLE) 
     # Mac 
     SET(RESOURCE_HANDLER ${CMAKE_CURRENT_SOURCE_DIR}/src/mac/resources.mm) 
     SET(MACOSX_BUNDLE_GUI_IDENTIFER "com.iaefai.Spider-Fish") 
     SET(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}) 
     if (NOT CMAKE_OSX_ARCHITECTURES) 
      set(CMAKE_OSX_ARCHITECTURES "i386;x86_64" 
       CACHE STRING "Build architectures for OSX" FORCE) 
     endif() 

     if(EXISTS /Developer/SDKs/MacOSX10.7.sdk) 
      set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.7.sdk" 
       CACHE STRING "Defaults to 10.7" FORCE) 
     else() 
      # use default SDK 
     endif()   

     find_library(COCOA_LIB Cocoa) 

     SET(EXTRA_LIBS ${COCOA_LIB} ${OPENGL_LIBRARIES}) 
ELSE() 
     # Linux // Assumed?? 
ENDIF() 

#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include}) 

include_directories(${SFML_INCLUDE_DIR}) 

SET(RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/background.jpg 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/blur.sfx 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/colorize.sfx 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/edge.sfx 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/fisheye.sfx 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/nothing.sfx 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/pixelate.sfx 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/sansation.ttf 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/sprite.png 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/wave.jpg 
       ${CMAKE_CURRENT_SOURCE_DIR}/assets/wave.sfx) 


SET (SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Shader.cpp) 
#SET (HEADERS include/resources.h) 


add_executable(${PROJECT_NAME} ${SOURCES} ${RESOURCE_HANDLER}) 

가장 큰 해킹은 리소스를 복사하는 것 같습니다. 멀티 플랫폼에서 그렇게 할 수있는 특별한 명령을 갖는 것이 이상적입니다. 그것을하는 방법을 완전히 확신하지는 않습니다 - 나는 set_target_resources가 좋은 이름이 될 것으로 생각합니다.

IF (APPLE) 

    set_target_properties(${PROJECT_NAME} 
     PROPERTIES 
      MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/src/mac/Spider-Fish-Info.plist 
      MACOSX_BUNDLE TRUE)  

# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 
    add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 
     COMMAND echo copying resources... 
     #${RESOURCES} 
     COMMAND mkdir -p ./${PROJECT_NAME}.app/Contents/Resources 
     COMMAND cp ${RESOURCES} ./${PROJECT_NAME}.app/Contents/Resources     
    ) 
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND echo ${PROJECT_NAME}.app/Contents/Resources) 


ENDIF (APPLE) 

IF (WIN32) 
    set_target_properties(${PROJECT_NAME} 
     PROPERTIES 
      WIN32_EXECUTABLE FALSE) 

나는 그것이 전문화되어 있기 때문에 창문에이 사용자 정의 물건에 대해 걱정할 것입니다.

set(EXTRA_LIBS sfml-main ${OPENGL_LIBRARIES}) 
    # note we can add stuff to ADDITIONAL_MAKE_CLEAN_FILES 
    string(COMPARE EQUAL ${CMAKE_GENERATOR} "NMake Makefiles" NMAKE) 
    if (NMAKE) 
     add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 
      COMMAND echo copying dlls... 
      COMMAND copy ${SFML_INCLUDE_DIR}\\..\\bin\\*.dll . 
      COMMAND echo copying resources... from ${CMAKE_CURRENT_SOURCE_DIR} 
      COMMAND -mkdir resources 
      COMMAND copy \"${CMAKE_CURRENT_SOURCE_DIR}\\assets\\*.*\" resources) 
    else() 
     add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 
      COMMAND echo copying dlls... 
      COMMAND copy ${SFML_INCLUDE_DIR}\\..\\bin\\*.dll . 
      COMMAND echo copying resources... from ${CMAKE_CURRENT_SOURCE_DIR} 
      # Visual Studio does not support the '-' to ignore errors 
      COMMAND rmdir /s /q resources 
      COMMAND mkdir resources 
      COMMAND copy \"${CMAKE_CURRENT_SOURCE_DIR}\\assets\\*.*\" resources) 
    endif (NMAKE) 
ENDIF (WIN32) 

#if (APPLE) 
target_link_libraries(${PROJECT_NAME} 
    sfml-system 
    sfml-window 
    sfml-network 
    sfml-graphics 
    sfml-audio 
    ${EXTRA_LIBS}) 
#endif (APPLE) 

답변

2

사용자 지정 게시 빌드 단계 대신 INSTALL 명령을 사용해 보았습니까?

+0

유망 해 보인다. –

관련 문제