Настройка кросс-платформенного проекта Ogre в репозитории Git

Я хочу начать проект кросс-платформенной игры с использованием Ogre, и я хочу разместить его в репозитории git. Я сотрудничаю с другом по этому поводу: я нахожусь на Mac с помощью Xcode, и он работает на ПК с помощью Visual Studio.

Я просмотрел сайт Ogre, и кажется, что CMake - это то, что я должен использовать, но я не уверен, как настроить его с помощью репозитория Git. Можете ли вы дать мне какие-либо указания о том, с чего начать, - руководства и руководства и т. Д.?

5 голосов | спросил bjz 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 03:30:48 +0400000000amWed, 22 Feb 2012 03:30:48 +040012 2012, 03:30:48

1 ответ


15

Во-первых, настройка кросс-платформенного Ogre и использование репозитория Git не имеют прямых отношений.

Управление контролем источника (независимо от того, является ли оно Git или нет), используется для синхронизации нескольких компьютеров независимо от того, все ли команды используют одинаковые ОС или разных ОС.

Если вы хотите использовать Source Control Management со своим другом, вам понадобится место для его размещения. Самый известный, если вы выберете Git , вероятно, github .

Однако вы также можете использовать Mercurial в сочетании с bitbucket как хост.

Дуэт Mercurial / bitbucket часто используется Indies и students, потому что bitbucket предлагает возможность создать бесплатную учетную запись пользователя 5 и сохранить ваш проект частным, а свободная учетная запись на github ограничивается проектом с открытым исходным кодом и требует платной учетной записи, чтобы получить конфиденциальность.


Теперь поговорим о CMake.

Я работаю над кросс-платформенным проектом (Linux, OSX, Windows) с помощью Ogre, и вот почему и как я использую CMake.

CMake полезен, поскольку он предлагает возможность вытеснять файлы Makefile одним файлом для всех платформ. Вы пишете хороший CMakeLists.txt, и он будет генерировать Makefile для каждой платформы (если бы вы дали ей правильную информацию действительно) со всеми небольшими изменениями.

Как правило, я использую точно такие же файлы на трех платформах, и Cmake генерирует разные Makefiles с помощью CMakeLists.txt (я использую ту же самую исходную папку с того же жесткого диска, и я сел CMake, чтобы он генерировал 3 файла makefile версии в сборке /Win build /OSX build /Linux)

В этот момент все, что мне нужно сделать, это запустить «make» и т. д. на каждой платформе, чтобы скомпилировать его.


Таким образом, используя «Управление исходным кодом» и «Cmake», вы должны работать с точно такими же источниками и скомпилировать его без серьезных головных болей (ну, кроме тех, которые необходимы для настройки файла Cmake ^^)


Поскольку вам нужны более подробные сведения о CMake и OSX, вот CMakeLists.txt моего проекта с большим количеством удаленных файлов (должно быть почти вдвое больше, но я удалил все избыточные вещи).

Этот пример не идеален (я по-прежнему не очень хорошо владею командами Cmake), и он не подходит для ваших нужд (помните, что я использую GCC под 3 платформами, поэтому он не настроен на запуск с Xcode! он может работать, поскольку Xcode может используйте GCC, но я не уверен на 100%.)

cmake_minimum_required(VERSION 2.6)

#------------------------------------------------------------------------------
#-------------------------------------------------------------- Init project --

set(CMAKE_PROJECT_NAME "OgreApp")
project(CMAKE_PROJECT_NAME)


if (CMAKE_BUILD_TYPE STREQUAL "")
  set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif ()

set(CMAKE_DEBUG_POSTFIX "_d")

set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/dist")

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(OGRE_SDK "${PROJECT_SOURCE_DIR}/data/osx/SDK" )     # I placed the SDK into my project/data/osx/SDK, if you place it anywhere else, you need to change this
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")


#------------------------------------------------------------------------------
#---------------------------------------------------- Ogre, OIS & Boost Libs --

if(WIN32)
    set(CMAKE_MODULE_PATH "$ENV{OGRE_HOME}/CMake/;${CMAKE_MODULE_PATH}")
endif(WIN32)

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(CMAKE_MODULE_PATH "/usr/local/lib/OGRE/cmake/;${CMAKE_MODULE_PATH}")
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(CMAKE_MODULE_PATH 
        "${OGRE_SDK}/CMake"
        "${OGRE_SDK}/CMake/Utils" 
        "${OGRE_SDK}/CMake/Packages"
    )
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")


#------------------
#------ Ogre Lib --

if(WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux")

    find_package(OGRE REQUIRED)
    if (OGRE_Terrain_FOUND)
        set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${OGRE_Terrain_LIBRARIES})  
        message(STATUS "Found OGRE_Terrain: ${OGRE_Terrain_LIBRARIES}")
    else (OGRE_Terrain_FOUND)
        message(SEND_ERROR "OgreTerrain Library not found.")
    endif(OGRE_Terrain_FOUND)

endif(WIN32 OR ${CMAKE_SYSTEM_NAME} MATCHES "Linux")

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    include_directories( ${OGRE_SDK}/lib/release/Ogre.framework/Headers/ )      # will search for OgreSDK/lib/release/Ogre.framework/Headers in OGRE_SDK (defined line 20)
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

   MESSAGE(STATUS "This will use the following Ogre version: ${OGRE_VERSION_NAME}")

#-----------------
#------ OIS Lib --

find_package(OIS REQUIRED)

if(NOT OIS_FOUND)
    message(SEND_ERROR "Failed to find OIS.")
endif()

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    include_directories( ${OGRE_SDK}/include/OIS/ ) # will search for OgreSDK/include/OIS/
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

#-------------------
#------ Boost Lib -- 

#if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
#   set(Boost_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/data/osx/SDK/include")
#endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

if(WIN32) #-- Required by the Ogre Window 32 version (not Linux nor OSX atm)
    # Find Boost
    if (NOT OGRE_BUILD_PLATFORM_IPHONE)
        if (WIN32 OR APPLE)
            set(Boost_USE_STATIC_LIBS TRUE)
        else ()
            # Statically linking boost to a dynamic Ogre build doesn't work on Linux 64bit
            set(Boost_USE_STATIC_LIBS ${OGRE_STATIC})
        endif ()
        if (MINGW)
            # this is probably a bug in CMake: the boost find module tries to look for
            # boost libraries with name libboost_*, but CMake already prefixes library
            # search names with "lib". This is the workaround.
            set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
        endif ()
        set(Boost_ADDITIONAL_VERSIONS "1.46" "1.46.0" "1.42" "1.42.0" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" )
        # Components that need linking (NB does not include header-only components like bind)
        set(OGRE_BOOST_COMPONENTS thread date_time)
        find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
        if (NOT Boost_FOUND)
            # Try again with the other type of libs
            set(Boost_USE_STATIC_LIBS NOT ${Boost_USE_STATIC_LIBS})
            find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
        endif()
        find_package(Boost QUIET)

        # Set up referencing of Boost
        include_directories(${Boost_INCLUDE_DIR})
        add_definitions(-DBOOST_ALL_NO_LIB)
        set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
    endif()
endif()

#------------------------------------------------------------------------------
#---------------------------------------------------------------- Extra Libs --

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

    FIND_LIBRARY(IOKit_LIBRARY IOKit)
    FIND_LIBRARY(COCOA_LIBRARY Cocoa)
    FIND_LIBRARY(CARBON_LIBRARY Carbon)
    FIND_LIBRARY(OPENGL_LIBRARY OpenGL)
    #FIND_LIBRARY(GLUT_LIBRARY GLUT )

    SET(EXTRA_LIBS ${EXTRA_LIBS} ${IOKit_LIBRARY} ${COCOA_LIBRARY} ${CARBON_LIBRARY} ${OPENGL_LIBRARY})

endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    SET(EXTRA_LIBS ${EXTRA_LIBS} GL GLU )
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")

if(WIN32)
    SET(EXTRA_LIBS ${EXTRA_LIBS} opengl32 glu32 ) #-lopengl32 -lglu32 -lglut32
endif(WIN32)

#------------------------------------------------------------------------------
#------------------------------------------ Prepare non library source files --

set(HDRS
    ./
)

set(SRCS
    ./main.cpp
)

include_directories(
    ${OIS_INCLUDE_DIRS}
    ${OGRE_INCLUDE_DIRS}
)


#------------------------------------------------------------------------------
#------------------------------------------------- Initialize Compiler flags --

#set(CMAKE_CXX_COMPILER "g++")                              #define the compiler to use 
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x ")      #define the C++0X flag
set(CMAKE_VERBOSE_MAKEFILE ON)

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Volumes/Dev/OgreSDK/lib/release/Ogre.framework/Versions/1.7.3/Ogre ")      # not sure it's still required !
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

#------------------------------------------------------------------------------
#----------------------------------------------------- Initialize Executable --

add_custom_command(TARGET ${CMAKE_PROJECT_NAME} PRE_BUILD COMMAND export LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/dist/bin:$LD_LIBRARY_PATH ) 

if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    add_executable(${CMAKE_PROJECT_NAME} MACOSX_BUNDLE ${HDRS} ${SRCS})
    add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND install_name_tool -change /opt/local/lib/gcc46/libstdc++.6.dylib @executable_path/libs/libstdc++.6.dylib ${CMAKE_PROJECT_NAME} WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin/${CMAKE_PROJECT_NAME}.app/Contents/MacOS ) 
else ()
    add_executable(${CMAKE_PROJECT_NAME} WIN32 ${HDRS} ${SRCS})
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES DEBUG_POSTFIX _d)



#------------------------------------------------------------------------------
#----------------------------------------------- Initialize Static Libraries --

#------ GameBoard --

file(GLOB SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} core/GameBoard.cpp core/GameBoard.h)
source_group("" FILES ${SRCS})
add_library(GameBoard STATIC ${SRCS})

#------ Player --

file(GLOB SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} core/Player.cpp core/Player.h)
source_group("" FILES ${SRCS})
add_library(Player STATIC ${SRCS})

#------ DebugTools --

file(GLOB SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} core/tools/*.cpp core/tools/*.h) #*/
source_group("" FILES ${SRCS})
add_library(DebugTools STATIC ${SRCS})

#------ etc. etc. etc.


## Tips for linking problems : If "A" depends on "B", then "A" must be BEFORE "B" in the following list. And remove "etc." indeed ;)
target_link_libraries(${CMAKE_PROJECT_NAME} GameBoard Player DebugTools etc. ${OGRE_LIBRARIES} ${OIS_LIBRARIES} ${EXTRA_LIBS} )



#------------------------------------------------------------------------------
#------------------------------------------------------------------- Install --

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/bin)

# post-build copy for win32
if(WIN32 AND NOT MINGW)
    add_custom_command( TARGET ${CMAKE_PROJECT_NAME} PRE_BUILD
        COMMAND if not exist .\\dist\\bin mkdir .\\dist\\bin )
    add_custom_command( TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
        COMMAND copy \"$(TargetPath)\" .\\dist\\bin )
endif(WIN32 AND NOT MINGW)

if(MINGW OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/dist/bin)
endif(MINGW OR ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}\\dist\\bin)
endif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")


# Install required files into the OSX Bundle (once again I placed all the stuff required into my project folder/data/etc.)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

    INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data/media DESTINATION bin/${CMAKE_PROJECT_NAME}.app/Contents/Resources)
    INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data/osx/Plugins DESTINATION bin/${CMAKE_PROJECT_NAME}.app/Contents)
    INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data/osx/Resources DESTINATION bin/${CMAKE_PROJECT_NAME}.app/Contents)
    INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data/osx/MacOS DESTINATION bin/${CMAKE_PROJECT_NAME}.app/Contents)
    INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data/osx/Frameworks DESTINATION bin/${CMAKE_PROJECT_NAME}.app/Contents)

endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

# Install required files for the Windows version
if(WIN32)

    install(TARGETS ${CMAKE_PROJECT_NAME}
        RUNTIME DESTINATION bin
        CONFIGURATIONS All)

    install(DIRECTORY ${CMAKE_SOURCE_DIR}/dist/Media
        DESTINATION ./
        CONFIGURATIONS Release RelWithDebInfo Debug
    )

    install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins.cfg
        ${CMAKE_SOURCE_DIR}/dist/bin/resources.cfg
        DESTINATION bin
        CONFIGURATIONS Release RelWithDebInfo
    )

    install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins_d.cfg
        ${CMAKE_SOURCE_DIR}/dist/bin/resources_d.cfg
        DESTINATION bin
        CONFIGURATIONS Debug
    )

    install(FILES ${OGRE_PLUGIN_DIR_REL}/OgreMain.dll
        ${OGRE_PLUGIN_DIR_REL}/RenderSystem_Direct3D9.dll
        ${OGRE_PLUGIN_DIR_REL}/RenderSystem_GL.dll
        ${OGRE_PLUGIN_DIR_REL}/OIS.dll
        DESTINATION bin
        CONFIGURATIONS Release RelWithDebInfo
    )

    install(FILES ${OGRE_PLUGIN_DIR_DBG}/OgreMain_d.dll
        ${OGRE_PLUGIN_DIR_DBG}/RenderSystem_Direct3D9_d.dll
        ${OGRE_PLUGIN_DIR_DBG}/RenderSystem_GL_d.dll
        ${OGRE_PLUGIN_DIR_DBG}/OIS_d.dll
        DESTINATION bin
        CONFIGURATIONS Debug
    )
endif(WIN32)

# similar install with Linux etc..
ответил Valkea 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 05:41:15 +0400000000amWed, 22 Feb 2012 05:41:15 +040012 2012, 05:41:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132